Получить последнюю запись для каждой даты из таблицы - PullRequest
1 голос
/ 31 июля 2009

У меня есть таблица, которая регистрирует обновления инвентаря в течение дня.

Инвентарь таблицыИстория:

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 Ответ

3 голосов
/ 31 июля 2009

как насчет попытки CTE с разделенным номером строки (SQL 2005 и новее) ...

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)
*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...