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

时间:2019-03-31 09:01:19

标签: mysql sql

我正在尝试使用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迭代所有对象之前。

预先感谢

1 个答案:

答案 0 :(得分:1)

如果您的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

Results

| 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           |

View on DB Fiddle