Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как проверить условием рядомстоящие ячейки? / 6 сообщений из 6, страница 1 из 1
28.09.2021, 08:21
    #40100375
Nikanette
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить условием рядомстоящие ячейки?
Приветствую всех.. Ломаю голову над одним запросом, есть некая таблица, где условно есть много других столбцов, но мне интересны столбцы ID(значения не уникальны могут повторяться в зависимости от количества статусов), DATA, STATUS(всего 3 наименования статусов, но они могут чередоваться хоть сколько раз). Нужно сделать выборку уникальных ID, где дата(max,самая свежая дата), а статус 1(это в принципе легко). Но вот второе условие, если при уникальном значении в свежей дате статус 2, то нужно выбрать втрое значение, если там статус 1, если же там статус 3, то такое значение вообще не нужно выводить, не могу придумать, как сделать.
...
Рейтинг: 0 / 0
28.09.2021, 14:53
    #40100471
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить условием рядомстоящие ячейки?
Nikanette
Приветствую всех.. Ломаю голову над одним запросом, есть некая таблица, где условно есть много других столбцов, но мне интересны столбцы ID(значения не уникальны могут повторяться в зависимости от количества статусов), DATA, STATUS(всего 3 наименования статусов, но они могут чередоваться хоть сколько раз). Нужно сделать выборку уникальных ID, где дата(max,самая свежая дата), а статус 1(это в принципе легко). Но вот второе условие, если при уникальном значении в свежей дате статус 2, то нужно выбрать втрое значение, если там статус 1, если же там статус 3, то такое значение вообще не нужно выводить, не могу придумать, как сделать.


второе значение в каком порядке сортировки?
приведите пример данных и какой вывод вы ожидаете... для случаев что вы описали.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
29.09.2021, 05:40
    #40100571
Nikanette
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить условием рядомстоящие ячейки?
Maxim Boguk,
ID ::::::::::::::::: DATA :::::::::::::STATUS
UYHF ::::::::: 11.03.20 :::::::::::::::: 1
UYHF ::::::::: 10.03.20 :::::::::::::::: 3
NKLA ::::::::: 05.02.20 :::::::::::::::: 2
NKLA ::::::::: 04.02.20 :::::::::::::::: 3
NKLA :::::::::: 02.02.20 ::::::::::::::: 1
POMB ::::::::: 01.02.20 ::::::::::::::: 2
POMB ::::::::: 30.01.20 ::::::::::::::: 1
POMB ::::::::: 29.01.20 ::::::::::::::: 3
LJOP ::::::::::: 22.01.20 ::::::::::::::: 1
LJOP ::::::::::: 20.01.20 ::::::::::::::: 3
KOPL ::::::::::: 18.01.20 ::::::::::::::: 3
KOPL ::::::::::: 17.01.20 ::::::::::::::: 1

Подходящие для вывода данные:
ID :::::::::::::::::::: DATA :::::::::::: STATUS
UYHF ::::::::::: 11.03.20 :::::::::::::::: 1
POMB :::::::::: 30.01.20 :::::::::::::::: 1
LJOP :::::::::::: 22.01.20 :::::::::::::::: 1
...
Рейтинг: 0 / 0
29.09.2021, 10:08
    #40100589
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить условием рядомстоящие ячейки?
Nikanette,

Если я нигде не напутал то через window функции легко склеивается (но если таблица очень большая то будет конечно неторопливо):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT 
  (res).* 
FROM (
  SELECT 
    rn, 
    CASE WHEN (current).status=1 THEN current WHEN ((current).status=2 and (prev).status=1) THEN prev END AS res 
  FROM (
    SELECT 
      row_number() OVER (w) as rn, 
      t111 AS current, 
      lead(t111) OVER (w) AS prev 
    FROM t111 
    WINDOW w AS (PARTITION BY id ORDER BY data DESC)
  ) AS _t1 
  WHERE rn=1
) AS _t2 
WHERE res IS NOT NULL;



с точностью до опечаток.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
29.09.2021, 12:01
    #40100633
Nikanette
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить условием рядомстоящие ячейки?
Maxim Boguk,
Благодарю, обязательно попробую, подскажи пожалуйста ещё, в самом верхнем SELECT, зачем (res) указывать?
...
Рейтинг: 0 / 0
29.09.2021, 12:32
    #40100644
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить условием рядомстоящие ячейки?
Nikanette
Maxim Boguk,
Благодарю, обязательно попробую, подскажи пожалуйста ещё, в самом верхнем SELECT, зачем (res) указывать?


потому что такой синтаксис распаковки ROW типов.
см https://www.postgresql.org/docs/13/rowtypes.html#ROWTYPES-ACCESSING

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как проверить условием рядомстоящие ячейки? / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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