如何使用 SQL 获取 2 列之间日期差异的计数(值的分布)?

Posted

技术标签:

【中文标题】如何使用 SQL 获取 2 列之间日期差异的计数(值的分布)?【英文标题】:How to get count (distribution of values) of date difference between 2 columns using SQL? 【发布时间】:2020-01-31 00:01:53 【问题描述】:

希望有人能提供帮助;我有 2 个表可以与列 ID 连接。

表 1 中有一列 created_date,表 2 中有一列 firstorderdate。我想从创建日期中减去第一个订单日期以获得天数,然后计算不同值的计数,理想情况下按降序排列。实际上,我正在尝试查看日期差异的分布。

我创建了一个 SQL fiddle 来帮助显示我的架构可能是什么样子。我的日期列可以包含空值,如果有意义的话,我只对它们都不是空值感兴趣。

http://sqlfiddle.com/#!9/9adbca

提前致谢

【问题讨论】:

请用您正在使用的数据库标记您的问题。日期函数是特定于供应商的。 如果你能显示你所期望的结果也会有所帮助。 它是 Oracle SQL,但我知道的就这么多了 您尝试了哪些方法,发现了哪些问题。 【参考方案1】:

从您提供的 sqlfiddle 假设 mysql

SELECT DATEDIFF(t2.FirstOrderDate, t1.created_date) as 'DaysBetween'
       , Count(1)
FROM Table1 t1
inner join Table2 t2
    on t1.ID = t2.ID
WHERE t2.FirstOrderDate is not null
and t1.created_date is not null
GROUP BY DATEDIFF(t2.FirstOrderDate, t1.created_date)

【讨论】:

我会试一试,我意识到我搞砸了我的 SQLfiddle 示例,因为它没有放入第二个表,所以感谢您的回复有加入。谢谢【参考方案2】:

使用min() 查找第一个订单日期和创建日期之间的差异。然后计算该查询的结果。

你甚至不需要非规范化的 firstOrderDate 列;只需加入订单即可。

类似:

select
    days,
    count(*)
from (
    select min(datediff(createdDate, orderDate)) as days
    from users
    join orders on orders.userId = users.id
    group by users.id) x
order by days

【讨论】:

以上是关于如何使用 SQL 获取 2 列之间日期差异的计数(值的分布)?的主要内容,如果未能解决你的问题,请参考以下文章

sql查询计算不同列和相邻行的两个日期之间的差异

在 Python 中获取数据透视表列之间的差异

Django过滤列之间的日期差异

如何使用 SQL 获取计数和百分比?

如何使用 TIMESTAMPDIFF 获取 PostgreSQL 中 2 个日期之间的差异? [复制]

如何计算Python Pandas中两列之间的日期差异[重复]