powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вычисление даты смены значения
5 сообщений из 5, страница 1 из 1
Вычисление даты смены значения
    #40077193
Tayler_Divers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,

Есть таблица из 3 столбцов (на самом деле больше, тут просто выдержка): id, date, flg. В поле flg есть 2 варианта "Y" и "N" , они чередуются и необходимо отследить даты смены. При этом даты в столбце 2 идут по нарастающей независимо от того меняется значение в 3 столбце или нет.

Условно так
1 13.05.2021 Да
2 13.05.2021 Нет
1 14.05.2021 Да
2 14.05.2021 Да
1 15.05.2021 Нет
2 15.05.2021 Да
1 16.05.2021 Нет
2 16.05.2021 Да
1 17.05.2021 Да
2 17.05.2021 Нет

Нужно привести к формату
1 13.05.2021 Да
1 15.05.2021 Нет
1 17.05.2021 Да
2 13.05.2021 Нет
2 14.05.2021 Да
2 17.05.2021 Нет

Прописан был запрос
Select
Id,
Flg,
Min(date) over (partition by id, flg order by date) from table

Но возвращает только минимальные даты, не обращая внимания на смены.
Где я ошибся? Только начал осваивать оконные функции, но затупил
...
Рейтинг: 0 / 0
Вычисление даты смены значения
    #40077210
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tayler_Divers,
если позволяет версия, то lead или lag
...
Рейтинг: 0 / 0
Вычисление даты смены значения
    #40077213
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tayler_Divers,

Код: sql
1.
2.
select top(1)with ties * from table
order by case when isnull(lag(flg)over(partition by id order by date),'') <> flg then 0 else 1 end
...
Рейтинг: 0 / 0
Вычисление даты смены значения
    #40077245
Tayler_Divers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKot,

Прописал lag вместо min, но результатом вышло последовательно по каждому id и дню, кроме первой даты каждого Да или Нет.. или внутри over тоже должно быть по-другому
...
Рейтинг: 0 / 0
Вычисление даты смены значения
    #40077252
spenov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
/*
create table #t (i int, d datetime, f bit)

insert #t values 
(1, '20210101', 0),
(1, '20210102', 0),
(1, '20210103', 1),
(1, '20210104', 0),
(1, '20210105', 1),
(1, '20210107', 1),
(1, '20210108', 1),
(2, '20210101', 0),
(1, '20210103', 1)
*/

with t as (
  select 
       *
      ,prev=lag(f) over (partition by i order by d)
    from #t
  )
  select *
    from t
    where f<>prev or prev is null
    order by i, d
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вычисление даты смены значения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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