[英]Calculate average, minimum, maximum interval between date
我正在尝试使用SQL执行此操作。 我有一个包含transaction_date
的事务表。 按日期分组后,我得到以下列表:
| transaction_date |
| 2019-03-01 |
| 2019-03-04 |
| 2019-03-05 |
| ... |
从这3个交易日期开始,我想要实现:
有什么好的语法吗? 在我使用WHILE迭代所有对象之前。
提前致谢
如果您的mysql版本不支持lag
或lead
功能。
您可以尝试使列使用子查询来获取下一个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.