-3

次のような約12000個のアイテムになる複雑な結合クエリがあります

SELECT        a.ID AS 'DealID', a.TradeDate, c.COMPANYNAME AS 'Seller Company', a.SellCommission, h.BROKER_FULLNAME AS 'Seller Trader', 
                         j.DisplayName AS 'Seller Broker', d.COMPANYNAME AS 'Buyer Company', a.BuyCommission, g.BROKER_FULLNAME AS 'Buyer Trader', 
                         i.DisplayName AS 'Buyer Broker', e.PRODUCT_NAME, f.TYPE_DESC AS 'Quantity Type', f.NBR_OF_GALLONS AS 'Quantity Multiplier', a.ContractVolume, 
                         a.TotalVolume, a.DeliveryPoint, a.Price, a.ContractStart, a.ContractEnd
FROM            Confirmations AS a WITH (nolock) LEFT OUTER JOIN
                         COMPANY AS c WITH (nolock) ON c.COMPANY_ID = a.SellCompany LEFT OUTER JOIN
                         COMPANY AS d WITH (nolock) ON d.COMPANY_ID = a.BuyCompany LEFT OUTER JOIN
                         BIOPRODUCTTYPES AS e WITH (nolock) ON e.ID = a.ProductID LEFT OUTER JOIN
                         BIO_QUANTITY_TYPE AS f WITH (nolock) ON f.ID = a.QuantityTypeID LEFT OUTER JOIN
                         COMPANYBROKER AS g WITH (nolock) ON g.COMPANYBROKER_ID = a.BuyTrader LEFT OUTER JOIN
                         COMPANYBROKER AS h WITH (nolock) ON h.COMPANYBROKER_ID = a.SellTrader LEFT OUTER JOIN
                         Users AS i WITH (nolock) ON i.ID = a.BuyBroker LEFT OUTER JOIN
                         Users AS j WITH (nolock) ON j.ID = a.SellBroker
WHERE        (a.TradeDate >= '2011-04-01 00:00:00') AND (a.TradeDate <= '2013-10-25 00:00:00')
ORDER BY a.TradeDate

しかし、すべての 12000 レコードの代わりに、「Seller Trader」ごとに最新のレコードである 1 つのレコードが必要です (現在、上記のクエリは、売り手トレーダーによって行われたすべての取引を返します)。これは、おそらく約 300 レコードを返します。

4

2 に答える 2

1

最新のレコードを取得する方法の 1 つは、データをサブクエリすることです。

SELECT   a.ID AS 'DealID',
         a.TradeDate,
         c.COMPANYNAME AS 'Seller Company',
         a.SellCommission,
         h.BROKER_FULLNAME AS 'Seller Trader',
         j.DisplayName AS 'Seller Broker',
         d.COMPANYNAME AS 'Buyer Company',
         a.BuyCommission,
         g.BROKER_FULLNAME AS 'Buyer Trader',
         i.DisplayName AS 'Buyer Broker',
         e.PRODUCT_NAME,
         f.TYPE_DESC AS 'Quantity Type',
         f.NBR_OF_GALLONS AS 'Quantity Multiplier',
         a.ContractVolume,
         a.TotalVolume,
         a.DeliveryPoint,
         a.Price,
         a.ContractStart,
         a.ContractEnd
FROM Confirmations AS a WITH (NOLOCK)
         LEFT OUTER JOIN COMPANY AS c WITH (NOLOCK) ON c.COMPANY_ID = a.SellCompany
         LEFT OUTER JOIN COMPANY AS d WITH (NOLOCK) ON d.COMPANY_ID = a.BuyCompany
         LEFT OUTER JOIN BIOPRODUCTTYPES AS e WITH (NOLOCK) ON e.ID = a.ProductID
         LEFT OUTER JOIN BIO_QUANTITY_TYPE AS f WITH (NOLOCK) ON f.ID = a.QuantityTypeID
         LEFT OUTER JOIN COMPANYBROKER AS g WITH (NOLOCK) ON g.COMPANYBROKER_ID = a.BuyTrader
         LEFT OUTER JOIN COMPANYBROKER AS h WITH (NOLOCK) ON h.COMPANYBROKER_ID = a.SellTrader
         LEFT OUTER JOIN Users AS i WITH (NOLOCK) ON i.ID = a.BuyBroker
         LEFT OUTER JOIN Users AS j WITH (NOLOCK) ON j.ID = a.SellBroker
WHERE    a.ID in 
         (
            Select max(ID) 
            from Confirmations (NOLOCK)
            Where TradeDate >= '2011-04-01 00:00:00' AND TradeDate <= '2013-10-25 00:00:00'
            Group by SellTrader
        )
ORDER BY a.TradeDate;
于 2013-10-28T15:18:15.947 に答える