SQL选择每个记录有限制的多个记录

时间:2019-01-10 17:15:11

标签: sql postgresql

我有一组时间戳[1544539216000, 1544604587000];我的目标是编写一个SQL查询,该查询针对每个时间戳返回单个记录,该时间戳要短一些并且更接近于当前时间戳。 (不确定如何覆盖类似的情况,例如在第二条记录之间没有记录时,返回与第一条记录相同的行。那怎么可能。

编辑

换句话说-“嘿,SQL占用了这些时间戳,对于每个时间戳,我都会得到一条记录,该时间戳越来越小。”输出计数必须等于输入计数。

到目前为止,我的代码是:

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

1 个答案:

答案 0 :(得分:1)

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]);