如何在sql查询中获取最新价格

时间:2013-06-10 14:23:34

标签: sql sql-server greatest-n-per-group

我需要得到持续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

并获得以下结果

enter image description here

如何运行查询只是获取突出显示的记录。我尝试做类似QuoteDate = max ......的事情,但也许我的灌输不正确。

感谢

2 个答案:

答案 0 :(得分:4)

因此,假设SQL Server 2005+,您可以使用CTEROW_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

答案 1 :(得分:0)

在order by子句之后使用HAVING QuoteDate = max ....