Как получить первую запись из группы записей MS sql - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть несколько идентификаторов бизнес-единиц с датами, когда были добавлены записи, и я хочу получить только строки, когда была добавлена ​​последняя запись

2018-06-26 22:54:51.190 1
2018-07-05 10:36:49.563 1
2018-07-16 10:14:04.093 1
2018-07-17 15:24:22.173 1
2018-07-19 10:40:24.700 1
2018-07-23 09:53:34.607 13
2018-07-23 09:53:57.107 13
2018-09-04 14:55:04.860 4
2018-09-04 14:56:34.147 4

должно быть

2018-07-19 10:40:24.700 1
2018-07-23 09:53:57.107 13
2018-09-04 14:56:34.147 4

Я пробовал это

select  
mnt.DateAdded,
bu.BuId
from BusinessUnit bu
inner join MagicNumbersTable mnt on mnt.BuId = bu.BuId
where bu.BuId in  (select top 1 b.BuId
                     from BusinessUnit b inner join MagicNumbersTable m on b.BuId = m.BuId
                     group by  b.BuId, m.DateAdded
                     order by m.DateAdded desc)

, которые возвращают только одну запись, а не каждый первый порядок записи по дате и времени добавления в бу

Каким будет правильный путь для достижения этого?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Из моего понимания я написал это. Что вы думаете об этом.

create table #maxDate (date datetime, id int)

insert #maxDate values
  ( '2018-06-26 22:54:51.190', 1)
, ( '2018-07-05 10:36:49.563', 1)
, ( '2018-07-16 10:14:04.093', 1)
, ( '2018-07-17 15:24:22.173', 1)
, ( '2018-07-19 10:40:24.700', 1)
, ( '2018-07-23 09:53:34.607', 13)
, ( '2018-07-23 09:53:57.107', 13)
, ( '2018-09-04 14:55:04.860', 4)
, ( '2018-09-04 14:56:34.147', 4)

select id, max(date) date from #maxDate
group by id

id              date
-------------------------------
 1      2018-07-19 10:40:24.700
 4      2018-09-04 14:56:34.147
 13     2018-07-23 09:53:57.107

Верните меня, если запрос требует обновлений.

0 голосов
/ 04 сентября 2018

Вы можете использовать функцию row_number() с связями предложение:

select top (1) with ties mnt.DateAdded, bu.BuId
from BusinessUnit bu inner join 
     MagicNumbersTable mnt 
     on mnt.BuId = bu.BuId
order by row_number() over (partition by bu.BuId order by mnt.DateAdded desc);

Тем не менее, вы можете просто использовать GROUP BY clasue с ​​MAX(), но при условии, что вам нужна дополнительная информация с этим. Если нет, то предложение GROUP BY достаточно для реализации, не нужно использовать subuqery или row_number()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...