可以使用子查询和窗口函数来实现此查询。首先,用子查询按id分组并找到每个组中的最早和最晚时间戳,然后用窗口函数获取每个组中第一个和最后一个值的行。具体代码如下:
SELECT distinct on (id) id, first_value(value) OVER w AS first_value, last_value(value) OVER w AS last_value
FROM (
SELECT id, value, timestamp
FROM my_table
WHERE id IN (
此代码将按照升序按id和时间戳对数据进行排序,然后使用DISTINCT ON语句按id对结果进行去重,然后使用窗口函数获取每个组中第一个和最后一个值的行。最终结果按id和时间戳逆序排序以获得最近的值。