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


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

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Как проверить условием рядомстоящие ячейки?
    #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
Как проверить условием рядомстоящие ячейки?
    #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
Как проверить условием рядомстоящие ячейки?
    #40100633
Nikanette
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,
Благодарю, обязательно попробую, подскажи пожалуйста ещё, в самом верхнем SELECT, зачем (res) указывать?
...
Рейтинг: 0 / 0
Как проверить условием рядомстоящие ячейки?
    #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
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как проверить условием рядомстоящие ячейки?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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