我需要查询我的日志表以查找价格何时上涨。如果价格在一天内增加了不止一次,我需要获得最新的价格只给我一个价格变化的项目的唯一行。
注意日期格式为:MM/DD/YYYY
示例数据:
ProductItem ProductPrice ProductDateChange
=====================================================
Salmon 2.54 01/05/2005 12:20:00
Tuna 3.67 01/05/2005 09:05:00
Salmon 2.67 01/06/2005 12:25:00
Salmon 1.98 01/05/2005 15:45:00
这4条记录是个别价格变动。您可以看到有两个Salmon
行在同一天,但我只想要一个具有最新DateTime的行。
期望输出:
ProductItem ProductPrice ProductDateChange
=====================================================
Tuna 3.67 01/05/2005 09:05:00
Salmon 2.67 01/06/2005 12:25:00
Salmon 1.98 01/05/2005 15:45:00
答案 0 :(得分:2)
假设您想要返回其他列,例如价格,使用WINDOW FUNCTION
将为每个产品提供行号,并按更改日期时间更改订购日期。
排序DESC
时,行WHERE LatestDailyPrice = 1
会为您提供最后一次更改。或者,您可以使用APPLY
和TOP 1
来获得相同的结果。
WITH LatestProductPrice AS
(
SELECT
ProductItem
, ProductPrice
, ProductDateChange
, ROW_NUMBER() OVER(PARTITION BY ProductItem
, CAST(ProductDateChange AS DATE)
ORDER BY ProductDateChange DESC) AS LatestDailyPrice
FROM
dbo.Product
)
SELECT
*
FROM
LatestProductPrice
WHERE
LatestDailyPrice = 1
更新以下评论:
或者如果你不能使用Common Table Expression
,那么这是完全相同的:
SELECT
*
FROM
(
SELECT
ProductItem
, ProductPrice
, ProductDateChange
, ROW_NUMBER() OVER(PARTITION BY ProductItem
, CAST(ProductDateChange AS DATE)
ORDER BY ProductDateChange DESC) AS LatestDailyPrice
FROM
dbo.Product
) AS LatestProductPrice
WHERE
LatestDailyPrice = 1
答案 1 :(得分:-1)
这可能会有所帮助:
SELECT DISTINCT(ProductItem),
MAX(ProductDateChange)
FROM Table
GROUP BY ProductItem
对于每个单独的产品项目,这将为您提供更改表中的最新日期时间值。