必须获得在成立后3年内被收购的公司数量
欢迎任何关于更好代码的建议!
我的代码
COUNT( CASE WHEN (acquisitions.acquired_at_cleaned - companies.founded_at_clean::timestamptz) <= (INTERVAL '3 Year') THEN 1
ELSE NULL END )as acquired_3_yrs
网站回答
COUNT(CASE WHEN acquisitions.acquired_at_cleaned <= companies.founded_at_clean::timestamp + INTERVAL '3 years'THEN
1 ELSE NULL END) AS acquired_3_yrs
这两个都给出不同的输出,变化非常小。 请解释我哪里出错了。
你的问题是你在不同的时间单位之间进行比较。如果您简单地选择
acquisitions.acquired_at_cleaned - companies.founded_at_clean
,您将得到一个以多少天和多少小时表示的答案。这不能准确地与以年表示的间隔进行比较。
作为测试简单地尝试
SELECT (INTERVAL '1080 DAY') <= (INTERVAL '3 YEAR');
和
SELECT (INTERVAL '1081 DAY') <= (INTERVAL '3 YEAR');
第一个是真的,第二个是假的。为什么?因为一年有12个月。一个月有多少天?有效地 Postgres 使用一年 12 个月 30 天。这不是错误。否则没有真正正确的方法(想想闰年!)。
网站的答案是正确的,因为 3 年被添加到一个特定的日期,这将给出预期的答案,