如何计算同一列中值的天差?

Posted

技术标签:

【中文标题】如何计算同一列中值的天差?【英文标题】:how to calculate days difference of vaules in same column? 【发布时间】:2020-04-22 09:10:48 【问题描述】:

我有这样的数据:

select * from date_table;
 startdate
2018-08-22
2018-08-24
2018-08-27
2018-08-29
2018-08-31
2018-09-05
2018-09-07
2018-09-10

我已经写了这个查询,它只给出了天的差异

CREATE temporary TABLE if not exists results AS (
select t.startdate, datediff( 
(select min(t1.startdate) 
from 
date_table t1 where
 t1.startdate>t.startdate),
t.startdate ) days_diff 
from 
date_table t) ;

select * from results:

以上查询给出的结果为:

startdate   days_diff 
2018-08-22    2
2018-08-24    3
2018-08-27    2
2018-08-29    2
2018-08-31    5
2018-09-05    2
2018-09-07    3  
2018-09-10  

但我想要这样的结果:

startdate     enddate      days_diff 
2018-08-22   2018-08-24      2
2018-08-27   2018-08-29      2
2018-08-31   2018-09-05      5
2018-09-07   2018-09-10      3

我正在使用 mysql(5.6 版)。请让我知道是否有解决此问题的方法。 提前致谢。

【问题讨论】:

现在不可能。记录没有允许区分什么是开始什么是结束的属性。 当然你可以枚举记录(使用用户定义的变量)并通过奇偶数来区分...在这种情况下按number-1 MOD 2分组 【参考方案1】:

您似乎想要枚举行然后聚合。在 8.0 之前的版本中,您可以使用变量。剩下的就是聚合:

select min(start_date) as start_date, max(start_date) as end_date
from (select (@rn := @rn + 1) as seqnum, t.*
      from (select t.* from date_table t order by start_date) t cross join
           (select @rn := 0) params
     ) t
group by floor((seqnum - 1) / 2);

【讨论】:

谢谢。这对我有用。

以上是关于如何计算同一列中值的天差?的主要内容,如果未能解决你的问题,请参考以下文章

如何在以下示例中计算出日差

计算列中值的百分位数

PHP - 如何回显列中值的总和?

如何获取列表中值的列总数 - 匿名类型的两倍

SQL如何使用同一列中的值之间匹配2个表

如何获取列中值的不同计数