在SQL中找出两个时间戳之间的天数。

问题描述 投票:0回答:1

我正在努力计算如何计算两个时间戳之间的时间差。

我的目标 -

一群客户在XXXX日下单,然后在XXXX日(不同的日期)继续取消,我想知道有多少客户在一年内取消。因此,如果一个客户在第366天取消订单,他们就不会出现在我的结果中。

我尝试了几个不同的函数,能找到的最接近的函数是INTERVAL。

例子 - WHERE cancel date >= order_date (365天内)

我希望这是有意义的,我没有遗漏任何明显的东西!

干杯Olly (一个业余的)

sql pgadmin
1个回答
1
投票

一年内取消订单的客户数量将是。

select count(*)
from t
where cancel_date <= order_date + interval '365 day';

0
投票

你必须非常小心你所谓的 "一年"。例如,考虑以下数据。

insert into some_table (id, order_date, cancel_date)
  values (1, now() - interval '30 day', now() - interval '10 day'),
         (2, now() - interval '2 year', now() - interval '18 month'),
         (3, now() - interval '3 year', now() - interval '1 year'),
         (4, date '2016-02-29',         date '2017-03-01'),
         (5, date '2016-02-29',         date '2017-02-28'),
         (6, date '2019-02-28',         date '2020-02-29'),
         (7, date '2016-02-01',         date '2017-02-01')

现在,根据你选择的 "一年 "的定义 你可以有2,3,4,6,也许还有其他的组合 满足你的选择标准。

例如,如果你选择使用 interval '1 year' 如图

select *
  from some_table t
  where t.cancel_date <= t.order_date + interval '1 year';

你会发现,带有 id 选择1、2、5和7的值。

如果你把上面的区间用 interval '364 day' 那么只有带有 id选择1和2的'。

用一个区间的 interval '365 day' 选择第1、2、5行。

并使用一个区间的 interval '366 day' 闰年,你知道:-)选取第1、2、4、5、6、7行。

然后你可以改变 <=< 并增加更多的混乱程度!

所以你有选择。明智地选择...:-)

db<>在这里摆弄。

© www.soinside.com 2019 - 2024. All rights reserved.