Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / IN с условием / 3 сообщений из 3, страница 1 из 1
16.10.2020, 14:20
    #40009237
про герр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IN с условием
Необходимо выбрать из таблицы:
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE public."RecordData"
(
  "id" uuid NOT NULL,
  "timestamp_start" TIMESTAMP WITHOUT TIME zone
)


данные старше определенной даты, если таковых не найдено, тогда самые ранние 50 записей.

Вот такой запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH "expired" AS 
(
    SELECT "id" FROM "RecordData" WHERE "timestamp_start" <= '2020-10-16 11:45:00'
),
"fifo" AS 
( 
    SELECT "id" FROM "RecordData" ORDER BY "timestamp_start" LIMIT 50
)
 
SELECT "id", "timestamp_start" FROM "RecordData"
WHERE  "id" IN (SELECT * FROM "expired") 
OR     "id" IN (SELECT * FROM "fifo")
ORDER BY "timestamp_start"



Объединяет и по дате и первые 50 записей.

Что надо добавить, чтобы он в случае, если "expired" запрос возвратил кол-во записей > 0, то 2-й уже не участвовал (игнорировался)?
...
Рейтинг: 0 / 0
16.10.2020, 14:32
    #40009245
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IN с условием
про герр,

как то так например

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH "expired" AS 
(
    SELECT "id" FROM "RecordData" WHERE "timestamp_start" <= '2020-10-16 11:45:00'
),
"fifo" AS 
( 
    SELECT "id" FROM "RecordData"  WHERE NOT EXISTS (SELECT FROM expired)  ORDER BY "timestamp_start" LIMIT 50
)
 
SELECT "id", "timestamp_start" FROM "RecordData"
WHERE  "id" IN ( SELECT * FROM "expired" UNION ALL SELECT * FROM "fifo" )
ORDER BY "timestamp_start"

Заодно поправил ужасную конструкцию IN OR IN которая к seq scan ведет часто по ведущей таблице на IN ( UNION ALL )



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
16.10.2020, 14:42
    #40009250
про герр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IN с условием
Maxim Boguk,

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


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