我正在努力找出如何计算两个时间戳之间的时间差我的目标-一堆客户在x订购,然后在x(不同的日期)取消订单,我很想知道一年内有多少客户取消订单。因此,如果客户在第366天取消,他们就不会出现在我的结果中。我尝试了几个不同的函数,最近的一个是interval示例-其中取消日期>=订单日期(365天内)我希望这是有意义的,我没有错过任何明显的!干杯奥利(业余爱好者)
waxmsbnn1#
一年内取消的客户数量为:
select count(*) from t where cancel_date <= order_date + interval '365 day';
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' 如图所示
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<>在这里摆弄
id
interval '364 day'
interval '365 day'
interval '366 day'
<=
<
2条答案
按热度按时间waxmsbnn1#
一年内取消的客户数量为:
azpvetkf2#
你必须非常小心你所说的“一年”。例如,考虑以下数据:
现在,根据你选择的“一年”的定义,你可以有2年,3年,4年,6年,也许以上的其他组合满足你的选择标准。
例如,如果您选择使用
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<>在这里摆弄