Выберите последнюю запись, записанную в таблице для каждого дня, в течение нескольких дней - PullRequest
1 голос
/ 14 апреля 2020

Как выбрать последнюю запись, записанную для каждого дня? В этом примере мне нужен последний заказанный номер элемента и последняя запись DateOrdered для каждого дня за последние 5 дней. Вот мой стол:

ItemNumber  |       DateOrdered
    1           2020-04-01 08:00:00.000
    3           2020-04-01 09:00:00.000
    5           2020-04-01 10:00:00.000
    4           2020-04-02 09:00:00.000
    6           2020-04-02 10:00:00.000
    7           2020-04-03 08:00:00.000
    3           2020-04-03 09:00:00.000
    2           2020-04-03 10:00:00.000
    5           2020-04-04 10:00:00.000
    8           2020-04-05 08:00:00.000
    2           2020-04-05 09:00:00.000
    8           2020-04-05 10:00:00.000

Вот результаты, которые мне нужны:

ItemNumber  |      DateOrdered
    5           2020-04-01 10:00:00.000
    6           2020-04-02 10:00:00.000
    2           2020-04-03 10:00:00.000
    5           2020-04-04 10:00:00.000
    8           2020-04-05 10:00:00.000

Это как можно ближе к нему:

with tempTable as
(
  select
    *,
    row_number() over(partition by datediff(d, 0, DateOrdered) order by DateOrdered desc) as rn 
  from myTable
)
select *
from tempTable  
where rn = 1

1 Ответ

0 голосов
/ 14 апреля 2020

Вы почти у цели. Вам просто нужно исправить определение вашего раздела, чтобы он объединял все строки, принадлежащие одному дню.

Это должно сделать это:

with tempTable as
(
  select
    *,
    row_number() over(partition by cast(DateOrdered as date) order by DateOrdered desc) as rn 
  from myTable
)
select *
from tempTable  
where rn = 1
...