【发布时间】:2019-01-04 09:29:40
【问题描述】:
我必须计算状态更改的次数,但前提是从一种状态到另一种状态的时间差小于 30 分钟。在我的数据库中,我有当前时间和以前的时间列,我使用过度分区。这是我的查询,但出现错误: “选定的非聚合值必须是关联组的一部分”。 有人可以帮忙吗?
select col1, col2,
MAX(creation_dt_utc) OVER(PARTITION BY col1,col2,col3 ORDER BY creation_dt ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS previous_creation_dt,
(creation_dt - prev_creation_dt) DAY(4) TO SECOND(6) as time_difference,
EXTRACT(DAY FROM time_difference) * 24*60 + EXTRACT(HOUR FROM time_difference) * 60 + EXTRACT(MINUTE FROM time_difference) AS Total_Minutes
SUM(
CASE WHEN status_previous='Test1'
and status_current='Test2' THEN 1
ELSE
CASE WHEN status_previous='Test3'
and status_current='Test2' THEN 1
ELSE
CASE WHEN status_previous='Test4'
and status_current='Test2' THEN 1
ELSE 0
END
END
END
) AS "Total_Change"
from myTable
qualify Total_Minutes<30
where EXTRACT(YEAR from year_column)='2017';
【问题讨论】:
-
最后的
group by col1, col2是不是错过了?但是,您的 SQL 存在更多问题。尝试发布此输入的示例输入和预期输出。 -
是的,对不起。我按 col1、col2 添加了组,但我仍然遇到相同的错误:“选定的非聚合值必须是关联组的一部分”
-
根据当前没有 SUM 的 Select,您的预期结果是什么?
-
我的预期结果应该是从一种状态到另一种状态的时间差小于 30 分钟的更改总数。