必须获得基金会在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

这两个都是不同的输出,变化非常小. 请解释一下我哪里出错了.

推荐答案

你的问题是你在不同的时间单位之间进行比较.如果您简单地 Select acquisitions.acquired_at_cleaned - companies.founded_at_clean,您将得到一个表示为多少天和小时的答案.这不能与以年为单位的间隔进行准确的比较.

作为一项测试,简单地try

SELECT (INTERVAL '1080 DAY') <= (INTERVAL '3 YEAR');

SELECT (INTERVAL '1081 DAY') <= (INTERVAL '3 YEAR');

第一个是真的,但第二个是假的.为什么?因为一年有12个月.一个月有几天?实际上,Postgres使用的是12个月30天的一年.这不是一个错误.除此之外,没有真正正确的方法(想想闰年吧!)

The Website answer works correctly because 3 years is added to a specific date, 和 that will give the expected answer,

Sql相关问答推荐

SQL查询以创建手头的流动余额?

SQL查询以条件空值跟踪生产操作结果进展

SQL是否可以计算每年的所有日期变化?

如何根据特定的内部json元素值过滤postgres查询结果?

如何在snowflake中进行SQL的反向填充

如何在SQL Server中统计按备注分组的记录数

多条件SQL排序行为

仅在日期相隔时递增(Oracle SQL)

使用拆分器将已分组的不同值连接在一起

通过对象分离实现原子性

为什么SQL in中的空子查询有时被视为null

SQL Server 查询 WHERE LIKE

达到特定值时,从0开始累加求和

如何根据共同列值从两个表中包含列,但只包含左表中的行

使用给定的变量对在循环中执行更新语句

SQL 函数 DIFFERENCE 返回有趣的分数

有没有一种方法可以将始终遵循序列的单个字段的值组合起来,以创建每个 ID 的所有移动?

连续日期的SQL

Snowflake SQL group-by 的行为不同,具体取决于列是按位置引用还是按别名引用

遍历数据,计算每个月最后三天的总和