postgresql—在sql中找出两个时间戳之间的天数

ldfqzlk8  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(393)

我正在努力找出如何计算两个时间戳之间的时间差
我的目标-
一堆客户在x订购,然后在x(不同的日期)取消订单,我很想知道一年内有多少客户取消订单。因此,如果客户在第366天取消,他们就不会出现在我的结果中。
我尝试了几个不同的函数,最近的一个是interval
示例-其中取消日期>=订单日期(365天内)
我希望这是有意义的,我没有错过任何明显的!
干杯奥利(业余爱好者)

waxmsbnn

waxmsbnn1#

一年内取消的客户数量为:

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

azpvetkf2#

你必须非常小心你所说的“一年”。例如,考虑以下数据:

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<>在这里摆弄

相关问题