powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / первая запись в окне для значения
5 сообщений из 5, страница 1 из 1
первая запись в окне для значения
    #39703140
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
;with rawData([timestamp],v) as 
(
select 
 '2018-08-22 01:33:40.0000000',1
 union all
 select
'2018-08-22 01:45:40.0000000',0 -- эта запись должна войти в выборку
union all
 select
'2018-08-22 15:02:56.0000000',0 -- эта нет
union all
 select
'2018-08-22 15:03:01.0000000',0 -- и эта нет
union all
 select
'2018-08-22 16:09:38.0000000',1
union all
 select
'2018-08-22 16:13:40.0000000',0
union all
 select
'2018-08-22 18:31:40.0000000',1
union all
 select
'2018-08-22 19:07:38.0000000',0

)



совсем мыслей пока нет, как получить результат

2018-08-22 01:33:40.0000000 1
2018-08-22 01:45:40.0000000 0
2018-08-22 16:09:38.0000000 1
2018-08-22 16:13:40.0000000 0
2018-08-22 18:31:40.0000000 1
2018-08-22 19:07:38.0000000 0


выборка изначально формируется во времени. меняется только 0 и 1 (а могут и не меняться, но timestamp всегда уникальный, и возрастает
...
Рейтинг: 0 / 0
первая запись в окне для значения
    #39703283
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewicz
Код: 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.
47.
48.
;with rawData([timestamp],v) as 
(
select 
 '2018-08-22 01:33:40.0000000',1
 union all
select 
 '2018-08-22 01:34:40.0000000',1 -- а эта запись должна войти в выборку ?
 union all
select 
 '2018-08-22 01:35:40.0000000',1 -- а эта запись должна войти в выборку ?
 union all
select 
 '2018-08-22 01:36:40.0000000',1 -- а эта запись должна войти в выборку ?
 union all
 select
'2018-08-22 01:45:40.0000000',0 -- эта запись должна войти в выборку
union all
 select
'2018-08-22 15:02:56.0000000',0 -- эта нет
union all
 select
'2018-08-22 15:03:01.0000000',0 -- и эта нет
union all
 select
'2018-08-22 16:09:38.0000000',1
union all
select 
'2018-08-22 16:09:39.0000000',1 -- а эта запись должна войти в выборку ?
union all
select 
'2018-08-22 16:09:39.5000000',1 -- а эта запись должна войти в выборку ?
union all
 select
'2018-08-22 16:13:40.0000000',0
union all
select 
'2018-08-22 16:13:41.0000000',0 -- а эта запись должна войти в выборку ?
union all
select 
'2018-08-22 16:13:42.0000000',0 -- а эта запись должна войти в выборку ?
union all
 select
'2018-08-22 18:31:40.0000000',1
union all
 select
'2018-08-22 19:07:38.0000000',0

)



совсем мыслей пока нет, как получить результат

2018-08-22 01:33:40.0000000 1
2018-08-22 01:45:40.0000000 0
2018-08-22 16:09:38.0000000 1
2018-08-22 16:13:40.0000000 0
2018-08-22 18:31:40.0000000 1
2018-08-22 19:07:38.0000000 0


выборка изначально формируется во времени. меняется только 0 и 1 (а могут и не меняться, но timestamp всегда уникальный, и возрастает
...
Рейтинг: 0 / 0
первая запись в окне для значения
    #39703284
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewicz,

но в целом, вам нужно смотреть в сторону LEAD/LAG, если версия сервера позволяет (2012 и выше)

если не позволяет, то TOP-1 [CROSS | OUTER] APPLY - подзапрос (версии 2005 / 2008)

если сервер и того древнее, то скалярный коррелированный TOP-1 подзапрос в списке SELECT
...
Рейтинг: 0 / 0
первая запись в окне для значения
    #39703335
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна,
нет, отмеченные желтым не должны. из повторяющихся нужны только самые ранние значения по времени в группе.
Код: sql
1.
select @@version


Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

lead/lag - по могу догнать, как поймать изменение значения и выкинуть дубликаты
в принципе курсором можно пробежать и добавить во времянку только нужное, но как-то не очень...
...
Рейтинг: 0 / 0
первая запись в окне для значения
    #39703350
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewiczlead/lag - по могу догнать, как поймать изменение значения и выкинуть дубликаты
в принципе курсором можно пробежать и добавить во времянку только нужное, но как-то не очень...

Пример реализации
Код: 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.
47.
48.
49.
50.
51.
52.
;with rawData([timestamp],v) as 
(
select 
 '2018-08-22 01:33:40.0000000',1
 union all
select 
 '2018-08-22 01:34:40.0000000',1 -- а эта запись должна войти в выборку ?
 union all
select 
 '2018-08-22 01:35:40.0000000',1 -- а эта запись должна войти в выборку ?
 union all
select 
 '2018-08-22 01:36:40.0000000',1 -- а эта запись должна войти в выборку ?
 union all
 select
'2018-08-22 01:45:40.0000000',0 -- эта запись должна войти в выборку
union all
 select
'2018-08-22 15:02:56.0000000',0 -- эта нет
union all
 select
'2018-08-22 15:03:01.0000000',0 -- и эта нет
union all
 select
'2018-08-22 16:09:38.0000000',1
union all
select 
'2018-08-22 16:09:39.0000000',1 -- а эта запись должна войти в выборку ?
union all
select 
'2018-08-22 16:09:39.5000000',1 -- а эта запись должна войти в выборку ?
union all
 select
'2018-08-22 16:13:40.0000000',0
union all
select 
'2018-08-22 16:13:41.0000000',0 -- а эта запись должна войти в выборку ?
union all
select 
'2018-08-22 16:13:42.0000000',0 -- а эта запись должна войти в выборку ?
union all
 select
'2018-08-22 18:31:40.0000000',1
union all
 select
'2018-08-22 19:07:38.0000000',0

)
select * from (
select * , case lag(v) over(order by [timestamp]) when v then 0 else 1 end as flag
from rawData
) v



Наложить во внешнем запросе условие "where flag = 1" сами сможете?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / первая запись в окне для значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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