从表中获取每个日期的最后记录

时间:2009-07-30 20:52:29

标签: sql sql-server

我有一张表全天记录库存更新。

表InventoryHistory:

UpdateID INT IDENTITY
ProductID INT
UpdateDateTime DATETIME
QuantityOnHand INT

样本记录:

1, 1, '7/29/2009 9:00', 100
2, 1, '7/29/2009 14:00', 99
3, 1, '7/29/2009 20:00', 98
4, 1, '7/30/2009 9:00', 97

对于给定的ProductID,我需要在过去30天内每天返回一行,该行在当天的下午5点之前有最后一次更新。

因此,productid = 1的结果应为:

2, 1, '7/29/2009 14:00', 99
4, 1, '7/30/2009 9:00', 97

我已经尝试用最后30天构建一个临时表,然后是一个子查询,但是我已经在圈子里运行了几个小时,我正试图找到一个优雅的解决方案(不使用游标)。

帮助!

1 个答案:

答案 0 :(得分:3)

如何尝试使用分区行号的CTE(SQL 2005& newer)......

WITH MyCte AS (SELECT  *,
                       RowNum = ROW_NUMBER() OVER (PARTITION BY CONVERT(CHAR(8), UpdateDateTime, 112) ORDER BY UpdateDateTime DESC ) 
               FROM    InventoryHistory
               WHERE   UpdateDateTime >= convert(char(8), dateadd(yy, -30, getdate()), 112)
                       AND DATEPART(hh, UpdateDateTime) < 17)
SELECT   UpdateID, 
         ProductID, 
         UpdateDateTime, 
         QuantityOnHand 
FROM     MyCte
WHERE    RowNum = 1


/* Results 
UpdateID    ProductID   UpdateDateTime          QuantityOnHand
----------- ----------- ----------------------- --------------
2           1           2009-07-29 14:00:00.000 99
4           1           2009-07-30 09:00:00.000 97

(2 row(s) affected)
*/