php - 计算mysql中连续行之间的日期差
问题描述
我在 mysql 中有一个带有列的表:
id, created_time, name
每行都有 id 和创建它的日期时间。例如下面:
id created_on name
1 2020-12-03 13:15:09 john
2 2020-11-08 14:11:19 john
3 2020-10-06 14:11:19 john
4 2020-09-12 14:11:19 john
想要显示 2 行之间的差异大于 30 天的结果
预期输出:-
id created_on name
2 2020-11-08 14:11:19 john
4 2020-09-12 14:11:19 john
我尝试使用以下查询但失败了,因为它显示了所有数据。
SELECT id
, name
FROM
( SELECT MIN(created_on) start_time
, id
, name
FROM table1
WHERE name = 'john'
GROUP
BY id
) start_action
JOIN
( SELECT MAX(created_on) close_time
, id
, name
FROM table1
WHERE name = 'john'
GROUP
BY id
) close_action
USING (id,name)
WHERE name = 'john'
我正在使用Mysql 5.6版本请求帮助
解决方案
您可以LEAD
在此处使用 MySQL 8+ 解决方案:
WITH cte AS (
SELECT *, LEAD(created_time) OVER (ORDER BY id) lead_created_time,
LAG(created_time) OVER (ORDER BY id) lag_created_time
FROM yourTable
)
SELECT id, created_time
FROM cte
WHERE ABS(DATEDIFF(lead_created_time, created_time)) > 30 OR
ABS(DATEDIFF(lag_created_time, created_time)) > 30;
演示
推荐阅读
- android - ClassNotFoundException 和 BIND_EXTERNAL_SERVICE 和 Android WebView 崩溃
- android - 我在 react-native 中从我的 android 手机获取所有联系人,但应用程序崩溃了?
- mysql - 如何从 json 数组中的视图中获取数据
- swift - 从 json 文件中获取 calendarkit 中的数据
- r - R Shiny 中的二元词云
- git - 如何将文件夹从一个仓库复制/移动/克隆到另一个仓库的根目录
- command-line - 抑制 *Out[]* IPython 打印,但不抑制其他打印
- hive - 启动时显示 hiveserver2 错误
- function - 如何在同一个窗口中添加两个flutter项目和核心库(包dart插件)
- java - javax.xml.crypto.dsig.XMLSignatureException:keyselector 没有找到验证密钥