繁体   English   中英

计算日期之间的平均,最小,最大间隔

[英]Calculate average, minimum, maximum interval between date

我正在尝试使用SQL执行此操作。 我有一个包含transaction_date的事务表。 按日期分组后,我得到以下列表:

| transaction_date |
|    2019-03-01    |
|    2019-03-04    |
|    2019-03-05    |
|       ...        |

从这3个交易日期开始,我想要实现:

  • 平均值=((4-1)+(5-4))/ 2 = 2天(每个日期计算DATEDIFF)
  • 最少= 1天
  • 最多= 3天

有什么好的语法吗? 在我使用WHILE迭代所有对象之前。

提前致谢

如果您的mysql版本不支持laglead功能。

您可以尝试使列使用子查询来获取下一个DateTime。 然后使用DATEDIFF获取子查询中的日期间隔。

查询1

SELECT avg(diffDt),min(diffDt),MAX(diffDt)
FROM (
  SELECT  DATEDIFF((SELECT transaction_date 
                            FROM  T tt
                            WHERE tt.transaction_date > t1.transaction_date
                            ORDER BY tt.transaction_date 
                            LIMIT 1
                           ),transaction_date) diffDt
  FROM T t1
) t1

结果

| avg(diffDt) | min(diffDt) | MAX(diffDt) |
|-------------|-------------|-------------|
|           2 |           1 |           3 |

如果您的mysql版本高于8.0,则可以尝试使用LEAD窗口函数而不是子查询。


查询#1

SELECT avg(diffDt),min(diffDt),MAX(diffDt)
FROM (
  SELECT  DATEDIFF(LEAD(transaction_date) OVER(ORDER BY transaction_date),transaction_date) diffDt
  FROM T t1
) t1;

| avg(diffDt) | min(diffDt) | MAX(diffDt) |
| ----------- | ----------- | ----------- |
| 2           | 1           | 3           |

在数据库小提琴上查看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM