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

问题描述 投票:0回答:1

我试图用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 sql
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.