我正在尝试使用SQL执行此操作。我有一个包含transaction_date
的交易表。按日期分组后,我得到以下列表:
| transaction_date |
| 2019-03-01 |
| 2019-03-04 |
| 2019-03-05 |
| ... |
从这3个交易日期开始,我要实现:
有什么好的语法吗?在我使用WHILE迭代所有对象之前。
预先感谢
答案 0 :(得分:1)
如果您的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
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 |