SQL выбирает несколько записей с ограничением на каждую итерацию - PullRequest
0 голосов
/ 10 января 2019

У меня есть массив отметок времени [1544539216000, 1544604587000]; моя цель состоит в том, чтобы написать запрос SQL, который для каждой отметки времени возвращает одну запись, причем отметка времени меньше и ближе к текущей отметке времени. (Не уверен, как охватить такие случаи, как, если между вторыми записями нет записей, которые возвращают те же строки, что и первый ...?) DB: Postgres. Как это возможно?

EDIT

Другими словами - «Эй, SQL, возьми те временные метки, и для каждой из них верни мне запись, какая временная метка меньше и ближе». Количество выводов должно быть равно количеству входных данных.

Код, который у меня пока есть:

SELECT * 
FROM public."myDate"
WHERE "createdAt" <= '1544539216000' AND "createdAt" <= '1544604587000'
ORDER BY id ASC 

1 Ответ

0 голосов
/ 11 января 2019

Подойдет ли решение plpsql?

CREATE FUNCTION select_by_dates(double precision[])
RETURNS SETOF public."myDate"
AS $$
DECLARE
cur_ts double precision;
out record;
BEGIN
FOREACH cur_ts IN ARRAY $1
LOOP
Select * FROM public."myDate" WHERE "createdAt" < cur_ts ORDER  BY "createdAt" DESC LIMIT 1 INTO out;
RETURN NEXT out;
END LOOP;
RETURN;
END;

$$Language plpgsql;



select * from select_by_dates(ARRAY[1544539216000, 1544604587000]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...