我有一组时间戳[1544539216000, 1544604587000]
;我的目标是编写一个SQL查询,该查询针对每个时间戳返回单个记录,该时间戳要短一些并且更接近于当前时间戳。 (不确定如何覆盖类似的情况,例如在第二条记录之间没有记录时,返回与第一条记录相同的行。那怎么可能。
编辑
换句话说-“嘿,SQL占用了这些时间戳,对于每个时间戳,我都会得到一条记录,该时间戳越来越小。”输出计数必须等于输入计数。
到目前为止,我的代码是:
SELECT *
FROM public."myDate"
WHERE "createdAt" <= '1544539216000' AND "createdAt" <= '1544604587000'
ORDER BY id ASC
答案 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]);