sql - Mariadb:在 WHERE 子句中使用窗口函数 LAG 的结果

标签 sql mariadb window-functions

我使用以下查询来获取两个时间戳之间的差异:

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/

相关文章:

mysql - 每 15 分钟获取一次入住率

sql - 查找不定期增加的行

sql - 填补 SQL Server 中年份序列的空白

恢复 mysqldump 文件时出现 mysql ERROR 1064 (42000)

mysql - MariaDB 不允许主机连接或拒绝用户访问

mysql - SQL 基于外键的约束检查

sql - 从余额行递归减去存款

sql - nvarchar(4001)?

php - 数据库设计-我应该有很多关于上传图像列的列还是应该将其放入包含很多行的新表中?

mysql - 如何在排序其余部分时将元组与 sql 排序隔离开来?