我正在努力计算如何计算两个时间戳之间的时间差。
我的目标 -
一群客户在XXXX日下单,然后在XXXX日(不同的日期)继续取消,我想知道有多少客户在一年内取消。因此,如果一个客户在第366天取消订单,他们就不会出现在我的结果中。
我尝试了几个不同的函数,能找到的最接近的函数是INTERVAL。
例子 - WHERE cancel date >= order_date (365天内)
我希望这是有意义的,我没有遗漏任何明显的东西!
干杯Olly (一个业余的)
一年内取消订单的客户数量将是。
select count(*)
from t
where cancel_date <= order_date + interval '365 day';
你必须非常小心你所谓的 "一年"。例如,考虑以下数据。
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行。
然后你可以改变 <=
到 <
并增加更多的混乱程度!
所以你有选择。明智地选择...:-)