首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算日期之间的平均、最小、最大间隔

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

Stack Overflow用户
提问于 2019-03-31 09:01:18
回答 1查看 1K关注 0票数 0

我正在尝试使用SQL来完成这个任务。我有一个包含transaction_date的事务表。按日期分组后,我得到了以下列表:

代码语言:javascript
复制
| transaction_date |
|    2019-03-01    |
|    2019-03-04    |
|    2019-03-05    |
|       ...        |

从这三个交易日期,我想达到:

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

有好的语法吗?在我用时间迭代它们之前。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-31 09:10:56

如果您的mysql版本不支持laglead函数。

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

查询1

代码语言:javascript
复制
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

结果

代码语言:javascript
复制
| avg(diffDt) | min(diffDt) | MAX(diffDt) |
|-------------|-------------|-------------|
|           2 |           1 |           3 |

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

查询#1

代码语言:javascript
复制
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           |

关于DB Fiddle的看法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55439312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档