我使用以下查询来获取两个时间戳之间的差异:
SELECT tracker_id,
TIMESTAMP,
LAG(TIMESTAMP) OVER(ORDER BY TIMESTAMP DESC),
TIMESTAMPDIFF(MINUTE,
TIMESTAMP,
LAG(TIMESTAMP) OVER(ORDER BY TIMESTAMP DESC)) AS diff_in_minutes
FROM comm_telemetry
WHERE comm_telemetry.tracker_id = "123456789"
ORDER BY comm_telemetry.timestamp DESC;
我想过滤结果,仅在 diff_in_months > 0 时显示。问题是,WHERE 子句中不允许使用 Windows 函数。
有什么建议可以解决这个问题吗?
最佳答案
您需要首先计算子查询中的滞后,然后再次查询以使用它进行过滤。
WITH cte AS (
SELECT tracker_id,
TIMESTAMP,
TIMESTAMPDIFF(MINUTE,
TIMESTAMP,
LAG(TIMESTAMP) OVER (ORDER BY TIMESTAMP DESC)) AS diff_in_minutes
FROM comm_telemetry
WHERE tracker_id = '123456789'
)
SELECT tracker_id, TIMESTAMP, diff_in_minutes
FROM cte
WHERE diff_in_minutes > 0
ORDER BY TIMESTAMP DESC;
关于sql - Mariadb:在 WHERE 子句中使用窗口函数 LAG 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73579806/