Lan Cui
Lan Cui

Reputation: 137

how to get the latest price in sql query

I need get the price of lasted QuoteDate.

Right now i have query like these

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

and get the following result

enter image description here

and how can i run a query just get the highlighted record.i try to do something like where QuoteDate =max......but maybe my grouyping is not correct.

thanks

Upvotes: 1

Views: 988

Answers (2)

Lamak
Lamak

Reputation: 70648

So, assuming SQL Server 2005+, you can use a CTE and 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

Upvotes: 4

TToni
TToni

Reputation: 9391

Use HAVING QuoteDate=max... after the order by clause.

Upvotes: 0

Related Questions