Как выбрать ГДЕ дата = последняя (дата <отметка времени :: дата + X)? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть большая таблица с отметками времени транзакций (цен) для ряда контрактов, последние можно определить по сроку их действия (дата). Моя цель - рассчитать «стандартный» контракт путем интерполяции. Поэтому мне нужны два контракта с истечением, ближайшим к цели. Например, если цель (expiry - timestamp :: date) = 30 дней, мне нужны все транзакции из последнего контракта, где (expiry - timestamp :: date) <30, а также все транзакции для первого контракта, где (expiry - timestamp :: date)> = 30.

Возможно ли реализовать это в предложении WHERE? Т.е. что-то вроде следующего псевдокода:

SELECT * FROM table
WHERE expiry = last(expiry < timestamp::date + 30)
OR expiry = first(expiry >=  timestamp::date + 30)

Я экспериментировал с подзапросами (ниже). Тем не менее, подзапросы возвращают ровно одну дату для всей таблицы, в то время как мне нужно MAX (expiry) относительно (timestamp :: date + 30) для отметки времени каждой строки.

SELECT * FROM table_name
WHERE (expiry = (
                 SELECT MAX(expiry) FROM table_name
                 WHERE expiry < timestamp::date + 30
                ) 
       OR
       expiry = (
                 SELECT MIN(expiry) FROM table_name
                 WHERE expiry > timestamp::date + 30
                ) 
       );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...