powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка без агригации других полей
6 сообщений из 6, страница 1 из 1
Группировка без агригации других полей
    #39781731
Фотография Garfish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Возникла потребность сгруппировать/отфильтрова данные

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare @A table (userid int, Channel1_Date datetime, type1_id int, Channel2_Date datetime, type2_id int,	profile_id int)

insert @A values(345,	'2019-01-23 00:00',	1,	'2018-10-19 13:30',	2,	435)
insert @A values(345,	'2018-10-25 13:30',	3,	'2019-01-25 00:00',	4,	750)
insert @A values(345,	'2018-10-22 13:30',	2,	NULL,	NULL,	NULL)
insert @A values(23,	'2019-01-26 00:00',	2,	'2019-01-25 00:00',	1,	223)
insert @A values(23,	'2019-01-27 00:00',	1,	NULL,	NULL,	NULL)
insert @A values(23,	NULL,	NULL,	'2019-01-23 00:00',	3,	224)

select * from @A  


результатом должно стать группировка по userid, и выборка самых первых дат отправки по каналу 1 и каналу 2, с сохранением атрибутов соответствующих данному каналу
для Channel1_Date атрибут type1_id
для Channel2_Date атрибут type2_id и profile_id

Код: html
1.
2.
3.
userid	Channel1_Date	             type1_id	Channel2_Date	             type2_id	profile_id
345,	2018-10-22 13:30:00.000,	2,	2018-10-19 13:30:00.000,	2,	435
23,	2019-01-26 00:00:00.000,	2,	2019-01-23 00:00:00.000,	3,	224


Подскажите, кто сталкивался с подобной задачей, как сделать такую выборку.
...
Рейтинг: 0 / 0
Группировка без агригации других полей
    #39781736
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так-то row_number()

Но можно тряхнуть стариной
Код: sql
1.
2.
select * from @A as a
           where Channel1_Date = ( select top(1) Channel1_Date from @A as x where x.userid = a.userid order by Channel1_Date desc )
...
Рейтинг: 0 / 0
Группировка без агригации других полей
    #39781738
Фотография Garfish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222, такая схема не сработает, может появиться несколько одинаковых дат,
Пытаюсь через row_number() , но еще не получатся

Код: sql
1.
2.
3.
select  *
from @A a
order by row_number() over(partition by a.userid order by a.Channel1_Date)
...
Рейтинг: 0 / 0
Группировка без агригации других полей
    #39781742
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garfishaleks222, такая схема не сработает, может появиться несколько одинаковых дат,
Пытаюсь через row_number() , но еще не получатся

Код: sql
1.
2.
3.
select  *
from @A a
order by row_number() over(partition by a.userid order by a.Channel1_Date)



А чем одна одинаковая дата хуже другой одинаковой даты?
Как только ты определишься - все заработает.
...
Рейтинг: 0 / 0
Группировка без агригации других полей
    #39781752
Фотография Garfish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222, будет задвоение данных, под условие попадут две даты
потом надо вывести по двум источникам
Channel1_Date, type1_id
Channel2_Date, type1_id, profile_id
...
Рейтинг: 0 / 0
Группировка без агригации других полей
    #39781754
Фотография Garfish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222, получилось примерно так

Код: sql
1.
2.
3.
4.
select top 1 with ties a.userid , a.Channel1_Date , a.type1_id, b.Channel2_Date , b.type2_id ,	b.profile_id
from @A a left join @A b on (a.userid=b.userid)
where a.Channel1_Date is not null and b.Channel2_Date is not null
order by row_number() over(partition by a.userid order by a.Channel1_Date asc, b.Channel2_Date asc)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка без агригации других полей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]