将每小时统计数据分组到每日条目中,并为每一天设置一个差异[SQL]

将每小时统计数据分组到每日条目中,并为每一天设置一个差异[SQL],sql,Sql,我试图将我每小时的统计数据压缩成每日的“差异”输出 我的数据库如下: 身份证件 时间戳 要点 1. 2021-04-16 09:15:00 1855 2. 2021-04-16 09:15:00 1261 1. 2021-04-16 10:15:00 1855 2. 2021-04-16 10:15:00 1264 1. 2021-04-16 11:15:00 1855 2. 2021-04-16 11:15:00 1264 . . . 1. 2021-04-17 09:15:00 1857 2

我试图将我每小时的统计数据压缩成每日的“差异”输出

我的数据库如下:

身份证件 时间戳 要点 1. 2021-04-16 09:15:00 1855 2. 2021-04-16 09:15:00 1261 1. 2021-04-16 10:15:00 1855 2. 2021-04-16 10:15:00 1264 1. 2021-04-16 11:15:00 1855 2. 2021-04-16 11:15:00 1264 . . . 1. 2021-04-17 09:15:00 1857 2. 2021-04-17 09:15:00 1282 1. 2021-04-17 10:15:00 1857 2. 2021-04-17 10:15:00 1283 1. 2021-04-17 11:15:00 1857 2. 2021-04-17 11:15:00 1284
我想您只需要
LAG()

请注意,我倾向于使用更多Postgres'y语法编写查询:

SELECT timestamp::DATE AS TIMESTAMP,
       MAX(points) AS pts,
       COALESCE(MAX(points) - LAG(MAX(points)) OVER (ORDER BY MIN(timestamp)), 0) as diff
FROM table_name
WHERE timestamp >= '2021-04-01' AND
      timestamp < '2021-05-01' AND
      id = 2
GROUP BY timestamp::DATE
ORDER BY timestamp::DATE;
选择时间戳::日期作为时间戳,
作为pts的最大(点数),
合并(最大(点)-滞后(最大(点))超过(按最小顺序(时间戳)),0)作为差异
从表\u名称
其中时间戳>='2021-04-01'和
时间戳<'2021-05-01'和
id=2
按时间戳分组::日期
按时间戳订购::日期;

WHERE
子句的更改对优化器更加友好,允许使用适当的索引(如果可用)。

Wow,这正是我需要的!谢谢,我还将研究LAG()函数,下次尝试更好地理解它。:)
SELECT timestamp::DATE AS TIMESTAMP,
       MAX(points) AS pts,
       COALESCE(MAX(points) - LAG(MAX(points)) OVER (ORDER BY MIN(timestamp)), 0) as diff
FROM table_name
WHERE timestamp >= '2021-04-01' AND
      timestamp < '2021-05-01' AND
      id = 2
GROUP BY timestamp::DATE
ORDER BY timestamp::DATE;