Получить последнюю запись в каждую неделю в течение нескольких лет - PullRequest
0 голосов
/ 16 января 2020

У меня есть следующая таблица для хранения истории для сущностей:

    Date                   Id        State
    -------------------------------------
    2017-10-10              1        0
    2017-10-12              1        4
    2018-5-30               1        8
    2019-4-1                2        0
    2018-3-6                2        4
    2018-3-7                2        0

Я хочу получить последнюю запись для каждого идентификатора в течение одной недели, например

    Date                   Id        State
    -------------------------------------
    2017-10-12              1        4
    2018-5-30               1        8
    2019-4-1                2        0
    2018-3-7                2        0

Я бы попробовал использовать Partition by:

select
        ID
       ,Date
        ,State
        ,DatePart(week,Date) as weekNumber
        from TableA
where   Date = (
            select max(Date) over (Partition by Id Order by DatePart(week, Date) Desc)
        )
order by ID

, но это все равно дает мне более одного результата в неделю.

1 Ответ

1 голос
/ 16 января 2020

Вы можете использовать ROW_NUMBER():

SELECT a.*
FROM (SELECT a.*, ROW_NUMBER() OVER (PARTITION BY a.id, DATEPART(WK, a.Date) ORDER BY a.Date DESC) AS Seq
      FROM tablea a
     ) a
WHERE seq = 1
ORDER BY id, Date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...