powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с оптимизацией запроса
3 сообщений из 3, страница 1 из 1
Помогите с оптимизацией запроса
    #38835357
Фотография chernomyrdin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует таблица:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE wkt_summary (
	id BIGINT,
	org_id BIGINT, -- ID организации
	wkt_id BIGINT, -- ID рабочего переода
	wkt_start timestamp with time zone, -- Дата/Время начала работы
	wkt_finish timestamp with time zone -- Дата/Время окончания работы
);


В ней есть данные:
Код: plsql
1.
2.
3.
4.
5.
INSERT INTO wkt_summary (org_id, wkt_id, wkt_start, wkt_finish) VALUES
	(1,100,'2014-12-16 09:00:00+03', '2014-12-16 13:00:00+03'),
	(1,101,'2014-12-16 14:00:00+03', '2014-12-16 18:00:00+03'),
	(2,103,'2014-12-17 14:00:00+03', '2014-12-16 20:00:00+03'),
	(2,104,'2014-12-18 09:00:00+03', '2014-12-16 14:00:00+03');



Требуется вывести из таблицы wkt_summary все записи которые: работают сейчас или будут работать в будущем
для определенности возьмем время 2014-12-16 12:00

То есть в результате работы должно получится:
Код: plaintext
1.
2.
3.
4.
 id | org_id | wkt_id |       wkt_start        |       wkt_finish       
----+--------+--------+------------------------+------------------------
    |      1 |    100 | 2014-12-16 09:00:00+03 | 2014-12-16 13:00:00+03
    |      2 |    103 | 2014-12-17 14:00:00+03 | 2014-12-16 20:00:00+03
    |      2 |    104 | 2014-12-18 09:00:00+03 | 2014-12-16 14:00:00+03

Сейчас у меня есть запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with
     c as (
         select * from wkt_summary where '2014-12-16 12:00:00+03'::timestamptz between wkt_start and wkt_finish
    ),
     f as (
         select * from wkt_summary where wkt_start > '2014-12-16 12:00:00+03'::timestamptz
     ),
     r as (
         select * from c
         UNION ALL
         select * from f WHERE org_id not in (select org_id from c)
    )
select * from r;



Возможно ли этот запрос как-нибудь упростить?
...
Рейтинг: 0 / 0
Помогите с оптимизацией запроса
    #38836005
grgdvo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chernomyrdin,

1. По-моему у Вас ошибка в примере. Как может работа закончиться раньше своего начала???
2. Если Вы говорите о времени, то может здесь все просто - надо проверить для всех записей больше заданной даты, что время попадает в заданный интервал?? Иначе, я вообще не понимаю вашу задачу.

Код: sql
1.
2.
3.
4.
5.
6.
7.
select
 *
from 
 wkt_summary
where
  wkt_start >= '2014-12-16 12:00:00+03'::timestamptz and
  12 between extract(hour from wkt_start) and extract(hour from wkt_finish)



Набрасал на память. Может где и ошибся в синтаксисе.
...
Рейтинг: 0 / 0
Помогите с оптимизацией запроса
    #38838061
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По идее, если работают сейчас или будет работать в будущем, то дата финиша д.б. больше, чем сейчас ( 2014-12-16 12:00), при условии, конечно, что wkt_start <= wkt_finish
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с оптимизацией запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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