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

У меня есть следующий набор данных.У меня есть несколько записей в течение нескольких дней.Мне нужна только самая последняя запись для каждого дня.

eid     aid     eDate                   lastUpdated
8963    3493689 2018-03-29 00:00:00.000 2018-03-29 09:53:03.080
8964    3493689 2018-03-29 00:00:00.000 2018-03-30 08:44:04.087
9127    3493689 2018-04-06 00:00:00.000 2018-03-30 11:00:47.450
9008    3493689 2018-04-06 00:00:00.000 2018-03-29 11:56:51.900 

Желаемый результат - только 2 записи (eid 8964 и 9127).Так что в основном одна запись за день.Запрос

select eid, aid, eventdate as eDate, lastUpdated from tbl_appt  where aid = '3493689'

Ответы [ 3 ]

4 голосов
/ 27 июня 2019

Вы можете разделить данные на eDate и получить первую строку для каждого раздела.если вы хотите выбрать самую новую запись, вам нужно использовать order by eventdate desc, а если вы хотите самую старую, используйте order by eventdate asc

;with ct as (
    select eid, aid, eventdate as eDate, lastUpdated
    , RN = ROW_NUMBER() over (PARTITION BY cast(eventdate as date) order by eventdate desc)
    from tbl_appt  
    where aid = '3493689'
)
select eid, aid, eDate, lastUpdated
from ct
where RN = 1
1 голос
/ 27 июня 2019

Простое НЕ СУЩЕСТВУЕТ подойдет:

select t.eid, t.aid, t.eventdate as eDate, t.lastUpdated 
from tbl_appt t 
where t.aid = '3493689'
and not exists (
  select 1 from tbl_appt
  where aid = t.aid and eventdate = t.eventdate and lastUpdated > t.lastUpdated
)

См. Демоверсию .
Результаты:

>  eid |     aid | eDate                   | lastUpdated        
> ---: | ------: | :------------------     | :------------------
> 8964 | 3493689 | 2018-03-29 00:00:00.000 | 2018-03-30 08:44:04.087
> 9127 | 3493689 | 2018-04-06 00:00:00.000 | 2018-03-30 11:00:47.450
0 голосов
/ 27 июня 2019

Попробуйте это

;WITH CTE (eid,     aid ,    eDate  , lastUpdated)
AS
(
SELECT 8963, 3493689,'2018-03-29 00:00:00.000','2018-03-29 09:53:03.080' UNION ALL
SELECT 8964, 3493689,'2018-03-29 00:00:00.000','2018-03-30 08:44:04.087' UNION ALL
SELECT 9127, 3493689,'2018-04-06 00:00:00.000','2018-03-30 11:00:47.450' UNION ALL
SELECT 9008, 3493689,'2018-04-06 00:00:00.000','2018-03-29 11:56:51.900' 
)
SELECT *
FROM
(
select      eid, 
            aid, 
            eDate as eDate, 
            lastUpdated,
            ROW_NUMBER()OVER(PARTITION BY eDate ORDER BY lastUpdated DESC) AS ltst
from CTE  
     )dt WHERE ltst =1
   AND  aid = '3493689'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...