Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / первая запись в окне для значения / 5 сообщений из 5, страница 1 из 1
16.09.2018, 18:59
    #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
17.09.2018, 04:17
    #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
17.09.2018, 04:20
    #39703284
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первая запись в окне для значения
waszkiewicz,

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

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

если сервер и того древнее, то скалярный коррелированный TOP-1 подзапрос в списке SELECT
...
Рейтинг: 0 / 0
17.09.2018, 08:52
    #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
17.09.2018, 09:10
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / первая запись в окне для значения / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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