Мне было интересно, можно ли одновременно выполнить условие IN и условие> (только если не найдено в IN) при сравнении дат из ряда дат?
Например,если 2018-01-01 не существует, он вытянет следующую доступную строку даты 2018-01-02, и это должно быть сделано для произвольного массива дат, который я предоставляю.(НЕ ДИАПАЗОН, так как это потянет даты, которые меня не интересуют.)
Пример:
create table trade (
id serial primary key,
year int,
month int,
"data" json
);
insert into trade ("year", "month", "data") VALUES (
2018, 1, '{"2": {"low": 19, "high": 21, "open": 20, "close": 20, "volume": 1000}, "3": {"low": 19, "high": 21, "open": 20, "close": 20, "volume": 1000}}'::json
);
insert into trade ("year", "month", "data") VALUES (
2018, 2, '{"1": {"low": 19, "high": 21, "open": 20, "close": 20, "volume": 1000}, "2": {"low": 19, "high": 21, "open": 20, "close": 20, "volume": 1000}}'::json
SELECT
t.prices,
make_date("year", "month", t.day::int) as date
FROM
trade
JOIN json_each(trade.data) t(day, prices) ON TRUE
WHERE
make_date("year", "month", t.day::int) IN ('2018-01-1', '2018-01-03')
);
Хотел бы, чтобы он возвращал цены 1950-01-03, 2018-01-03, И 2018-01-02 (поскольку 2018-01-01 не существует)
Я работаю над функцией, которая будет делать соотношение результатов 1/1, когда я предоставляю датыменя интересует, и если они не существуют, он вернет следующую доступную дату.