Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка подряд идущих записей / 25 сообщений из 27, страница 1 из 2
05.03.2018, 16:32
    #39610746
MAPODEP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Добрый день. Помогите пожалуйста с написанием запроса для выборки подряд идущих записей (сортировка по дате), чтобы в подгруппе с одинаковым ID выбиралась минимальная и максимальна дата Trackdate

ID TrackDate CarName
1 2018-03-02 07:00:56.000 ГАЗ 3309
1 2018-03-02 07:09:56.000 ГАЗ 3309
1 2018-03-02 07:18:56.000 ГАЗ 3309
1 2018-03-02 07:30:23.000 ГАЗ 3309
3 2018-03-02 07:30:33.000 ГАЗ 3309
3 2018-03-02 07:30:43.000 ГАЗ 3309
3 2018-03-02 07:33:15.000 ГАЗ 3309
3 2018-03-02 07:42:38.000 ГАЗ 3309
2 2018-03-02 07:42:41.000 ГАЗ 3309
2 2018-03-02 07:42:44.000 ГАЗ 3309
2 2018-03-02 07:42:58.000 ГАЗ 3309
2 2018-03-02 07:43:02.000 ГАЗ 3309
3 2018-03-02 07:43:05.000 ГАЗ 3309
3 2018-03-02 07:43:13.000 ГАЗ 3309
3 2018-03-02 07:46:03.000 ГАЗ 3309
1 2018-03-02 07:47:21.000 ГАЗ 3309
1 2018-03-02 07:47:24.000 ГАЗ 3309
1 2018-03-02 09:18:24.000 ГАЗ 3309
3 2018-03-02 09:19:03.000 ГАЗ 3309
3 2018-03-02 09:42:25.000 ГАЗ 3309
3 2018-03-02 09:57:59.000 ГАЗ 3309
3 2018-03-02 10:00:28.000 ГАЗ 3309
3 2018-03-02 10:02:51.000 ГАЗ 3309
1 2018-03-02 10:03:12.000 ГАЗ 3309
1 2018-03-02 10:03:16.000 ГАЗ 3309
1 2018-03-02 13:12:14.000 ГАЗ 3309
1 2018-03-02 13:12:21.000 ГАЗ 3309

Результат запроса должен быть таким:
1 2018-03-02 07:00:56.000 ГАЗ 3309
1 2018-03-02 07:30:23.000 ГАЗ 3309
3 2018-03-02 07:30:33.000 ГАЗ 3309
3 2018-03-02 07:42:38.000 ГАЗ 3309
2 2018-03-02 07:42:41.000 ГАЗ 3309
2 2018-03-02 07:43:02.000 ГАЗ 3309
3 2018-03-02 07:43:05.000 ГАЗ 3309
3 2018-03-02 07:46:03.000 ГАЗ 3309
1 2018-03-02 07:47:21.000 ГАЗ 3309
1 2018-03-02 09:18:24.000 ГАЗ 3309
3 2018-03-02 09:19:03.000 ГАЗ 3309
3 2018-03-02 10:02:51.000 ГАЗ 3309
1 2018-03-02 10:03:12.000 ГАЗ 3309
1 2018-03-02 13:12:21.000 ГАЗ 3309
...
Рейтинг: 0 / 0
05.03.2018, 16:41
    #39610753
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Поиск по форуму даст 2 ляма возможных решений
...
Рейтинг: 0 / 0
05.03.2018, 16:41
    #39610754
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
row_number() over(partition by ID order by TrackDate asc) as rn1
row_number() over(partition by ID order by TrackDate desc) as rn2

оставлять только записи у которых (rn1 или rn2) = 1
...
Рейтинг: 0 / 0
05.03.2018, 16:42
    #39610756
Wlr-l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Записи перенумеровать в возрастающем и убывающем порядке. Оставить те, где номер равен единице.
...
Рейтинг: 0 / 0
05.03.2018, 16:56
    #39610764
MAPODEP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Дедушка,

не подойдет, я уже пробовал, получается вот такое:
rn1 rn2 ID TrackDate CarName
58 581 3 2018-03-02 07:42:16.000 ГАЗ 3309
59 580 3 2018-03-02 07:42:21.000 ГАЗ 3309
60 579 3 2018-03-02 07:42:38.000 ГАЗ 3309
1 6 2 2018-03-02 07:42:41.000 ГАЗ 3309
2 5 2 2018-03-02 07:42:44.000 ГАЗ 3309
3 4 2 2018-03-02 07:42:58.000 ГАЗ 3309
4 3 2 2018-03-02 07:43:02.000 ГАЗ 3309
61 578 3 2018-03-02 07:43:05.000 ГАЗ 3309
62 577 3 2018-03-02 07:43:13.000 ГАЗ 3309
63 576 3 2018-03-02 07:43:25.000 ГАЗ 3309
...
Рейтинг: 0 / 0
05.03.2018, 17:02
    #39610767
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MAPODEPДобрый день. Помогите пожалуйста с написанием запроса для выборки подряд идущих записей (сортировка по дате), чтобы в подгруппе с одинаковым ID выбиралась минимальная и максимальна дата Trackdate

ID TrackDate CarName
1 2018-03-02 07:00:56.000 ГАЗ 3309
1 2018-03-02 07:09:56.000 ГАЗ 3309
1 2018-03-02 07:18:56.000 ГАЗ 3309
1 2018-03-02 07:30:23.000 ГАЗ 3309
1 2018-03-02 07:47:21.000 ГАЗ 3309
1 2018-03-02 07:47:24.000 ГАЗ 3309
1 2018-03-02 09:18:24.000 ГАЗ 3309
1 2018-03-02 10:03:12.000 ГАЗ 3309
1 2018-03-02 10:03:16.000 ГАЗ 3309
1 2018-03-02 13:12:14.000 ГАЗ 3309
1 2018-03-02 13:12:21.000 ГАЗ 3309

Результат запроса должен быть таким:
1 2018-03-02 07:00:56.000 ГАЗ 3309
1 2018-03-02 07:30:23.000 ГАЗ 3309
1 2018-03-02 07:47:21.000 ГАЗ 3309
1 2018-03-02 09:18:24.000 ГАЗ 3309
1 2018-03-02 10:03:12.000 ГАЗ 3309
1 2018-03-02 13:12:21.000 ГАЗ 3309

т.е. - порядок записей у вас тупо визуальный ?
...
Рейтинг: 0 / 0
05.03.2018, 17:05
    #39610768
MAPODEP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Maxx,

групировка по trackDate
...
Рейтинг: 0 / 0
05.03.2018, 17:06
    #39610770
MAPODEP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MAPODEP,

то есть сортировка
...
Рейтинг: 0 / 0
05.03.2018, 17:10
    #39610774
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MAPODEPMAPODEP,

то есть сортировка

еслиб сортировка то выбирать надо первую и последнюю запись из списка (дедушкин подход)
если версия позволяет то можно смотреть на FISRT\LAST fisrt_value
...
Рейтинг: 0 / 0
05.03.2018, 17:12
    #39610776
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MaxxПоиск по форуму даст 2 ляма возможных решений
http://www.sql.ru/forum/1222969/generaciya-intervalo-dat?hl=first_value
...
Рейтинг: 0 / 0
05.03.2018, 17:13
    #39610779
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MAPODEPне подойдет, я уже пробовал, получается вот такое:top with ties
...
Рейтинг: 0 / 0
05.03.2018, 17:20
    #39610786
MAPODEP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Maxx,

поймите - мне нужно, что бы выбирало максимальную и минимальную дату по ID в пределах повторяющихся подряд записях, то есть из этого
ID TrackDate CarName
1 2018-03-02 07:00:56.000 ГАЗ 3309 мин
1 2018-03-02 07:09:56.000 ГАЗ 3309
1 2018-03-02 07:18:56.000 ГАЗ 3309
1 2018-03-02 07:30:23.000 ГАЗ 3309 макс

3 2018-03-02 07:30:33.000 ГАЗ 3309 мин
3 2018-03-02 07:30:43.000 ГАЗ 3309
3 2018-03-02 07:33:15.000 ГАЗ 3309
3 2018-03-02 07:42:38.000 ГАЗ 3309 макс

2 2018-03-02 07:42:41.000 ГАЗ 3309 мин
2 2018-03-02 07:42:44.000 ГАЗ 3309
2 2018-03-02 07:42:58.000 ГАЗ 3309
2 2018-03-02 07:43:02.000 ГАЗ 3309 макс

3 2018-03-02 07:43:05.000 ГАЗ 3309 мин
3 2018-03-02 07:43:13.000 ГАЗ 3309
3 2018-03-02 07:46:03.000 ГАЗ 3309 макс

1 2018-03-02 07:47:21.000 ГАЗ 3309 мин
1 2018-03-02 07:47:24.000 ГАЗ 3309
1 2018-03-02 09:18:24.000 ГАЗ 3309 макс

3 2018-03-02 09:19:03.000 ГАЗ 3309 мин
3 2018-03-02 09:42:25.000 ГАЗ 3309
3 2018-03-02 09:57:59.000 ГАЗ 3309
3 2018-03-02 10:00:28.000 ГАЗ 3309
3 2018-03-02 10:02:51.000 ГАЗ 3309 макс

1 2018-03-02 10:03:12.000 ГАЗ 3309 мин
1 2018-03-02 10:03:16.000 ГАЗ 3309
1 2018-03-02 13:12:14.000 ГАЗ 3309
1 2018-03-02 13:12:21.000 ГАЗ 3309 макс

получить это
ID TrackDate CarName
1 2018-03-02 07:00:56.000 ГАЗ 3309 мин
1 2018-03-02 07:30:23.000 ГАЗ 3309 макс
3 2018-03-02 07:30:33.000 ГАЗ 3309 мин
3 2018-03-02 07:42:38.000 ГАЗ 3309 макс
2 2018-03-02 07:42:41.000 ГАЗ 3309 мин
2 2018-03-02 07:43:02.000 ГАЗ 3309 макс
3 2018-03-02 07:43:05.000 ГАЗ 3309 мин
3 2018-03-02 07:46:03.000 ГАЗ 3309 макс
1 2018-03-02 07:47:21.000 ГАЗ 3309 мин
1 2018-03-02 09:18:24.000 ГАЗ 3309 макс
3 2018-03-02 09:19:03.000 ГАЗ 3309 мин
3 2018-03-02 10:02:51.000 ГАЗ 3309 макс
1 2018-03-02 10:03:12.000 ГАЗ 3309 мин
1 2018-03-02 13:12:21.000 ГАЗ 3309 макс
...
Рейтинг: 0 / 0
05.03.2018, 17:23
    #39610787
Wlr-l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MAPODEP,

Так и мы о том же.
...
Рейтинг: 0 / 0
05.03.2018, 17:29
    #39610797
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING если версия 2012 и выше
...
Рейтинг: 0 / 0
05.03.2018, 17:31
    #39610801
MAPODEP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Maxx,

MSSQL 9.0.5000(
...
Рейтинг: 0 / 0
05.03.2018, 17:42
    #39610810
MAPODEP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Wlr-l,

так оно считает не в подгруппе, а по всем записям

ID TrackDate CarName
1 2018-03-02 07:00:56.000 ГАЗ 3309 мин
3 2018-03-02 07:30:33.000 ГАЗ 3309 мин
2 2018-03-02 07:42:41.000 ГАЗ 3309 мин
2 2018-03-02 07:43:02.000 ГАЗ 3309 макс
3 2018-03-02 10:02:51.000 ГАЗ 3309 макс
1 2018-03-02 13:12:21.000 ГАЗ 3309 макс
...
Рейтинг: 0 / 0
05.03.2018, 17:49
    #39610819
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MAPODEP,

создали Вы себе проблему, надо было группы сразу нумеровать. А теперь они существуют только в воображении.
Попробуйте пронумеровать курсором с сортировкой по дате, в теле которого ловите изменения ID.
...
Рейтинг: 0 / 0
05.03.2018, 17:49
    #39610820
Wlr-l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MAPODEP,

Дедушка все написал: группировка по ID, сортировка по TrackDate в двух направлениях, фильтрация нужных записей.

Что здесь может быть не так?
...
Рейтинг: 0 / 0
05.03.2018, 17:55
    #39610823
Wlr-l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Wlr-l,

С учетом замечания Владислав Колосов.
...
Рейтинг: 0 / 0
05.03.2018, 18:00
    #39610825
MAPODEP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Wlr-l,

что я не так тогда делаю?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
;with Table1 as (
    select
		row_number() over(partition by ID order by TrackDate asc) as rn1,
		row_number() over(partition by ID order by TrackDate desc) as rn2, *
    from trackhistorytmp
)
select *
from Table1 t
where t.rn1=1 or t.rn2=1
order by trackdate
...
Рейтинг: 0 / 0
05.03.2018, 18:04
    #39610830
Wlr-l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MAPODEP

Ошибка в самом начале, как заметил Владислав Колосов. Устраните ее, тогда остальное будет правильно.
...
Рейтинг: 0 / 0
05.03.2018, 18:10
    #39610838
MAPODEP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
Wlr-l,

если бы я знал как пронумеровать курсором, я бы уже это сделал)
...
Рейтинг: 0 / 0
05.03.2018, 18:16
    #39610841
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MAPODEPчто я не так тогда делаю?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
declare @t table(ID int, TrackDate datetime, CarName varchar(10))

insert @t
(ID, TrackDate, CarName)
values
(1,	'2018-03-02 07:00:56.000',	' 3309'),
(1,	'2018-03-02 07:09:56.000',	' 3309'),
(1,	'2018-03-02 07:18:56.000',	' 3309'),
(1,	'2018-03-02 07:30:23.000',	' 3309'),
(3,	'2018-03-02 07:30:33.000',	' 3309'),
(3,	'2018-03-02 07:30:43.000',	' 3309'),
(3,	'2018-03-02 07:33:15.000',	' 3309'),
(3,	'2018-03-02 07:42:38.000',	' 3309'),
(2,	'2018-03-02 07:42:41.000',	' 3309'),
(2,	'2018-03-02 07:42:44.000',	' 3309'),
(2,	'2018-03-02 07:42:58.000',	' 3309'),
(2,	'2018-03-02 07:43:02.000',	' 3309'),
(3,	'2018-03-02 07:43:05.000',	' 3309'),
(3,	'2018-03-02 07:43:13.000',	' 3309'),
(3,	'2018-03-02 07:46:03.000',	' 3309')

;with tt as (
    select
		row_number() over(partition by ID order by TrackDate asc) as rn1,
		row_number() over(partition by ID order by TrackDate desc) as rn2, *
    from @t
)

select 
ID, TrackDate, CarName
from 
tt
where
rn1=1 or rn2=1
order by
ID, TrackDate

1	2018-03-02 07:00:56.000	 3309
1	2018-03-02 07:30:23.000	 3309
2	2018-03-02 07:42:41.000	 3309
2	2018-03-02 07:43:02.000	 3309
3	2018-03-02 07:30:33.000	 3309
3	2018-03-02 07:46:03.000	 3309


результат тот, что нужно?
...
Рейтинг: 0 / 0
05.03.2018, 18:17
    #39610843
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
а, понял про какие вы группы :)
...
Рейтинг: 0 / 0
05.03.2018, 18:54
    #39610862
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка подряд идущих записей
MAPODEP,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
declare @t table (ID int, TrackDate datetime, CarName varchar(30));

insert into @t
select  1,'20180302 07:00:56.000',  'ГАЗ 3309' union all
select  1,' 20180302 07:09:56.000',  'ГАЗ 3309' union all
select  1,' 20180302 07:18:56.000',  'ГАЗ 3309' union all
select  1,' 20180302 07:30:23.000',  'ГАЗ 3309' union all
select  3,' 20180302 07:30:33.000',  'ГАЗ 3309' union all
select  3,' 20180302 07:30:43.000',  'ГАЗ 3309' union all
select  3,' 20180302 07:33:15.000',  'ГАЗ 3309' union all
select  3,' 20180302 07:42:38.000',  'ГАЗ 3309' union all
select  2,' 20180302 07:42:41.000',  'ГАЗ 3309' union all
select  2,' 20180302 07:42:44.000',  'ГАЗ 3309' union all
select  2,' 20180302 07:42:58.000',  'ГАЗ 3309' union all
select  2,' 20180302 07:43:02.000',  'ГАЗ 3309' union all
select  3,' 20180302 07:43:05.000',  'ГАЗ 3309' union all
select  3,' 20180302 07:43:13.000',  'ГАЗ 3309' union all
select  3,' 20180302 07:46:03.000',  'ГАЗ 3309' union all
select  1,' 20180302 07:47:21.000',  'ГАЗ 3309' union all
select  1,' 20180302 07:47:24.000',  'ГАЗ 3309' union all
select  1,' 20180302 09:18:24.000',  'ГАЗ 3309' union all
select  3,' 20180302 09:19:03.000',  'ГАЗ 3309' union all
select  3,' 20180302 09:42:25.000',  'ГАЗ 3309' union all
select  3,' 20180302 09:57:59.000',  'ГАЗ 3309' union all
select  3,' 20180302 10:00:28.000',  'ГАЗ 3309' union all
select  3,' 20180302 10:02:51.000',  'ГАЗ 3309' union all
select  1,' 20180302 10:03:12.000',  'ГАЗ 3309' union all
select  1,' 20180302 10:03:16.000',  'ГАЗ 3309' union all
select  1,' 20180302 13:12:14.000',  'ГАЗ 3309' union all
select  1,' 20180302 13:12:21.000',  'ГАЗ 3309';

with t as
(
 select
  ID, CarName, TrackDate,
  row_number() over (order by TrackDate) - row_number() over (partition by ID order by TrackDate) as g
 from
  @t
)
select
 a.ID, a.CarName, b.dt
from
 (select g, ID, CarName, min(TrackDate), max(TrackDate) from t group by ID, CarName, g) a(g, ID, CarName, min_dt, max_dt) cross apply
 (select a.min_dt union all select a.max_dt) b(dt)
order by
 a.g, a.ID, b.dt;
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка подряд идущих записей / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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