powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти минимум в каждой повторяющейся группе
4 сообщений из 4, страница 1 из 1
Найти минимум в каждой повторяющейся группе
    #39764191
xaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите найти минимальную дату в каждой повторяющейся группе. т.е.

Есть в таблица с дискретными параметрами и их значениями , вставляемыми каждую минуту.
Нужно найти в каждой группе, минимальное время прихода параметра.

24.01.2019 17:12:00 1
24.01.2019 17:11:00 1
24.01.2019 17:10:00 1
24.01.2019 17:09:00 0
24.01.2019 17:08:00 0
24.01.2019 17:07:00 1
24.01.2019 17:06:00 1
24.01.2019 17:05:00 0
24.01.2019 17:04:00 0
24.01.2019 17:03:00 0
24.01.2019 17:02:00 1
24.01.2019 17:01:00 1
24.01.2019 17:00:00 1
24.01.2019 16:59:00 1
--
Нужно получить
d_start val d_start_min

24.01.2019 17:12:00 1
24.01.2019 17:11:00 1
24.01.2019 17:10:00 1 24.01.2019 17:10:00
24.01.2019 17:09:00 0
24.01.2019 17:08:00 0 24.01.2019 17:08:00
24.01.2019 17:07:00 1
24.01.2019 17:06:00 1 24.01.2019 17:06:00
24.01.2019 17:05:00 0
24.01.2019 17:04:00 0
24.01.2019 17:03:00 0 24.01.2019 17:03:00
24.01.2019 17:02:00 1
24.01.2019 17:01:00 1
24.01.2019 17:00:00 1
24.01.2019 16:59:00 1 24.01.2019 16:59:00

Делала :

Код: sql
1.
2.
3.
4.
5.
6.
select  d_start,val,row_number()  over (partition by VAL  order by  D_START desc) as num_,
min(D_START )  over (partition by VAL  order by  D_START ) as min_  
from DS_LP_TEHN.VALUES_TBL
where D_START >= sysdate-1/24
      and  FL_VALID =1
      and ID_PARAM in (2879)



Но вся выборка делится на две группы 0 и 1 и в них ищется минимум, а мне нужно узнать, когда первый раз(время) был 0 или 1, в каждой группе повторяющихся данных.
...
Рейтинг: 0 / 0
Найти минимум в каждой повторяющейся группе
    #39764210
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xalyвся выборка делится на две группы 0 и 1так убери partition by. И функцию более подходящую, минимальное время в группе это время начала группы.
...
Рейтинг: 0 / 0
Найти минимум в каждой повторяющейся группе
    #39764259
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xaly,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT dt, val, lag(val,1,-100500) over (order by dt) lag_val,  
      CASE WHEN lag(val,1,-100500) over (order by dt) != val THEN 'смена значиния или новое' ELSE 'всё по старому' END diff
FROM (
select sysdate dt , 1 val from dual union
select sysdate + 1/3600 , 1 val from dual union
select sysdate + 2/3600 , 1 val from dual union
select sysdate + 3/3600 , 0 val from dual union
select sysdate + 4/3600 , 0 val from dual union
select sysdate + 5/3600 , 1 val from dual union
select sysdate + 6/3600 , 1 val from dual union
select sysdate + 7/3600 , 1 val from dual union
select sysdate + 8/3600 , 0 val from dual union
select sysdate + 9/3600 , 1 val from dual union
select sysdate + 10/3600 , 0 val from dual union
select sysdate + 11/3600 , 0 val from dual union
select sysdate + 12/3600 , 0 val from dual) t
order by dt
...
Рейтинг: 0 / 0
Найти минимум в каждой повторяющейся группе
    #39764342
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_Demin,

не проще?
Код: plsql
1.
      CASE WHEN lag(val) over (order by dt) = val THEN 'всё по старому' ELSE 'смена значиния или новое' END diff



.....
stax
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти минимум в каждой повторяющейся группе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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