>我有时间戳数组[1544539216000, 1544604587000]
;我的目标是编写一个SQL查询,为每个时间戳返回单个记录,该时间戳更少,更接近当前时间戳。(不确定如何涵盖诸如如果第二条记录之间没有记录之类的情况,则返回与第一条记录相同的行..?DB:邮政。这怎么可能。
编辑
换句话说 - "嘿 SQL 获取这些时间戳,并且每个时间戳都返回我一个时间戳更少、更近的记录"。输出计数必须等于输入计数。
到目前为止,我的代码是:
SELECT *
FROM public."myDate"
WHERE "createdAt" <= '1544539216000' AND "createdAt" <= '1544604587000'
ORDER BY id ASC
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]);