Return 列具有最大值的行

Return rows with maximum value of a column

我有一个 table 看起来像这样:

date       | product | price
--------------------------------
17/01/2015 | milk    | 2.54
18/01/2015 | milk    | 2.47
23/01/2015 | milk    | 2.61
21/01/2015 | eggs    | 1.35
04/02/2015 | eggs    | 1.36
27/01/2015 | eggs    | 1.31

我需要的是select,returns我每个产品的最新价格,也就是日期最长的那一个。这里期望的结果是:

23/01/2015 | milk    | 2.61
04/02/2015 | eggs    | 1.36

我试过这个:

select max(date), product, price FROM table GROUP BY product, price

但它没有按预期工作。

使用相关子查询查找每个产品的最后日期:

select date, product, price
from table t1
where date = (select max(date) from table t2
              where t1.product = t2.product)

(阅读Damien_The_Unbeliever的评论后我想补充一点,如果存在多个条目具有相同的产品最大日期,它们将全部退回。)

这样试试:

select max(date), product,price
from table
group by product, price

您可以在 MS SQL 中使用 ROW_NUMBER()

DECLARE @TABLE TABLE([Date] DATE, Product VARCHAR(40), Price DECIMAL(18,2))

INSERT INTO @TABLE VALUES
('01/17/2015', 'milk', '2.54'),
('01/18/2015', 'milk', '2.47'),
('01/23/2015', 'milk', '2.61'),
('01/21/2015', 'egg', '1.35'),
('02/04/2015', 'egg', '1.36'),
('01/27/2015', 'egg', '1.31')

SELECT * FROM 
(
    SELECT ROW_NUMBER() OVER (PARTITION BY Product ORDER BY [Date] DESC) RN, Product, Price
     FROM @TABLE
)  Temp
WHERE RN = 1  

试试这个:

   SELECT tb.*
FROM table tb
INNER JOIN
    (SELECT  MAX(date), product AS MaxDateTime
    FROM table
    GROUP BY product) groupedtb 
ON tb.product = groupedtb.product 
AND tb.date = groupedtb.MaxDateTime

我知道你已经收到回复了,但这也行:)

            DECLARE @TableProducts TABLE (
            [date] DATE,
            Product VARCHAR(100),
            Price NUMERIC(9,2)
            );

            INSERT INTO @TableProducts
            VALUES 
            ('17/01/2015', 'milk', 2.54),
            ('18/01/2015', 'milk', 2.47),
            ('23/01/2015', 'milk', 2.61),
            ('21/01/2015', 'eggs', 1.35),
            ('04/02/2015', 'eggs', 1.36),
            ('27/01/2015', 'eggs', 1.31);


            SELECT B.Product, B.Price, A.MostRecentDate
            FROM (
                    SELECT Product, MAX([date]) AS MostRecentDate
                    FROM @TableProducts
                    GROUP BY Product
            ) AS A
            INNER JOIN @TableProducts AS B  ON A.Product = B.Product
                                            AND A.MostRecentDate = B.[date];