powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос, как найти соседние строки?
3 сообщений из 28, страница 2 из 2
Запрос, как найти соседние строки?
    #39066006
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисс оконными функциями колёса покруглей будут
Имелось виду нечто вида
Код: sql
1.
2.
3.
4.
5.
6.
7.
with A as (
  select
    m.*, lead(date_from) over(partition by user_id order by date_from) as to_date
    from movements m
)
select * from A
  where user_id = 1 and date_from <= '2015-09-05 15:00' and '2015-09-05 15:00' < to_date


?
...
Рейтинг: 0 / 0
Запрос, как найти соседние строки?
    #39066045
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

имелось ввиду именно то, что я написал. В твоём варианте предикаты не будут проталкиваться внутрь CTE, что обречёт на FULL SCAN таблицы movements даже при наличии любых индексов. Фильтр для user_id я не ставил потому, что надо для каждого сотрудника вывести было.

Хотя чисто в теории user_id мог бы проталкиваться внутрь для данного конкретного случая, т.к. не влияет на конечный результат. Но в FB оптимизатор пока ещё не достаточно умён и приходится самому запихивать его внутрь CTE.

Вторую задачку с уколами уже так легко не решить. По крайней мере эффективно решить весьма затруднительно.
...
Рейтинг: 0 / 0
Запрос, как найти соседние строки?
    #39066072
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисимелось ввиду именно то, что я написал.
На самом деле цель понятна, но под каждый случай нужен свой запрос.
Наличие рассчитанного to_date позволяет всегда индексироваться и выполнять веселее.
А ещё to_date для последней даты удобно держать в виде 31.12.2999, дабы не играться с null-ами.
Ну и prev_state_id, prev_record_id материализовать уже по случаю.
Запросы такие часты, и каждый раз городить огород...
В FB нет параметризованных вьюшек, значит CTE-всегда.
...
Рейтинг: 0 / 0
3 сообщений из 28, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос, как найти соседние строки?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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