1

前回の QuoteDate の価格を取得する必要があります。

今、私はこれらのようなクエリを持っています

SELECT      dbo.INMT.Material, dbo.INMT.LastVendor, dbo.INMT.AvgCost, dbo.MSQD.Status, dbo.MSQH.QuoteDate, dbo.MSQD.UnitPrice
FROM         dbo.INMT INNER JOIN
                      dbo.MSQD ON dbo.INMT.MatlGroup = dbo.MSQD.MatlGroup AND dbo.INMT.Material = dbo.MSQD.Material INNER JOIN
                      dbo.MSQH ON dbo.MSQD.MSCo = dbo.MSQH.MSCo AND dbo.MSQD.Quote = dbo.MSQH.Quote
GROUP BY dbo.INMT.Material, dbo.INMT.LastVendor, dbo.INMT.AvgCost, dbo.MSQD.Status, dbo.MSQD.UnitPrice, dbo.MSQH.QuoteDate
ORDER BY dbo.INMT.Material

そして次の結果を得る

ここに画像の説明を入力

そして、強調表示されたレコードを取得するだけでクエリを実行するにはどうすればよいですか。 where QuoteDate = max ...のようなことをしようとしていますが、おそらく私のグルーピングは正しくありません。

ありがとう

4

2 に答える 2

4

したがって、SQL Server 2005+ を想定する CTEと、 とを使用できROW_NUMBER()ます。

;WITH CTE AS
(
    SELECT  I.Material, 
            I.LastVendor, 
            I.AvgCost, 
            MD.Status, 
            MH.QuoteDate, 
            MD.UnitPrice,
            RN = ROW_NUMBER() OVER( PARTITION BY I.Material, I.LastVendor, 
                                                 I.AvgCost, MD.Status, 
                                                 MD.UnitPrice
                                    ORDER BY MH.QuoteDate DESC)
    FROM dbo.INMT I
    INNER JOIN dbo.MSQD MD
        ON I.MatlGroup = MD.MatlGroup 
        AND I.Material = MD.Material 
    INNER JOIN dbo.MSQH MH
        ON MD.MSCo = MH.MSCo 
        AND MD.Quote = MH.Quote
)
SELECT  Material, 
        LastVendor, 
        AvgCost, 
        Status, 
        QuoteDate, 
        UnitPrice
FROM CTE
WHERE RN = 1
于 2013-06-10T14:29:47.587 に答える
0

order by 句の後に HAVING QuoteDate=max... を使用します。

于 2013-06-10T14:27:34.217 に答える