程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了mysql group by uid 计算连续日期差异大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决mysql group by uid 计算连续日期差异?

开发过程中遇到mysql group by uid 计算连续日期差异的问题如何解决?下面主要结合日常开发的经验,给出你关于mysql group by uid 计算连续日期差异的解决方法建议,希望对你解决mysql group by uid 计算连续日期差异有所启发或帮助;

@H_675_3@数据

uID  data_date 
a    2020-12-31
a    2021-01-01
a    2021-01-05
b    2021-03-02
b    2021-03-05
b    2021-03-07

@H_675_3@预期

uID  date_diff
a    1
a    4
b    3
b    2

@H_675_3@尝试和参

  • GetTing date difference between consecutive rows in the same group。由于MysqL版本,我无法使用任何windows功能。
@H_409_2@mysqL 版本:5.5

解决方法

在 MySQL 8+ 上,我们可以尝试将 LAGDATEDIFF 一起使用:

WITH cte AS (
    SELECT *,LAG(data_datE) OVER (PARTITION BY uid
                                   ORDER BY data_datE) AS lag_data_date
    FROM yourTable
)

SELECT uid,DATEDIFF(data_date,lag_data_datE) AS date_diff
FROM cte
WHERE lag_data_date IS NOT NULL
ORDER BY uid,data_date;

mysql group by uid 计算连续日期差异

Demo

上面的 HAVING 子句过滤掉每个 uid 组的“第一条”记录,因为第一条记录在技术上没有任何与之关联的日期差异(您的预期输出也不包含此记录)。

@H_675_3@编辑:

这是一个应该在 MySQL 5.7 或更早版本上运行的版本。它使用相关子查询而不是 LAG() 来查找滞后日期:

SELECT uid,(SELECT t2.data_date FROM yourTable t2
         WHERE t2.uid = t1.uid AND t2.data_date < t1.data_date
         ORDER BY t2.data_date DESC LIMIT 1)) AS date_diff
FROM yourTable t1
HAVING date_diff IS NOT NULL
ORDER BY uid,data_date;

Demo

大佬总结

以上是大佬教程为你收集整理的mysql group by uid 计算连续日期差异全部内容,希望文章能够帮你解决mysql group by uid 计算连续日期差异所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。