平台:Snowflake
我正在构建一个需要最新部门信息的报告。一些部门已经更新,并采用新的时间戳日期,显示他们是最新的。我只涉足SQL一年,到目前为止,我用大多数其他查询来自动化仪表板都运行得很好,但是这个查询甚至在谷歌等之后也难倒了我。
我试着写这个:
select MAX(EFFDT), DEPTID, EFF_STATUS, DESCR
from "DATA_LAKE"."PS_FS"."PS_DEPT_TBL";
我得到这个错误:
SQL compilation error: [PS_DEPT_TBL.DEPTID] is not a valid group by expression
也许需要分区?如果是,我该如何构建它?
的例子:
Row Dept EFFDT
Row 1 DEPT78 1990-01-01 00:00:00.0000
Row 2 DEPT78 1990-01-02 00:00:00.0000 < I want this record/row to populate and not row 1 above.
Row 3 DEPT79 1990-01-01 00:00:00.0000
Row 4 DEPT79 1990-01-02 00:00:00.0000 < I want this record/row to populate and not row 3 above.
感谢您的帮助。
我试着研究不同的方法来获取最新的数据,但失败了,因为我相信我需要一个更密集的查询来获得想要的结果。
示例数据与SQL不一致,但似乎可以按除EFFDT以外的列进行分组:
select MAX(EFFDT), DEPTID, EFF_STATUS, DESCR
from "DATA_LAKE"."PS_FS"."PS_DEPT_TBL"
group by DEPTID, EFF_STATUS, DESCR
;
如果这不起作用,那是因为它对太多的列进行了分组。如果你只需要按"深度"分组例如,但需要其他列:
select MAX(EFFDT), DEPTID, max(EFF_STATUS) as EFF_STATUS, max(DESCR) as DESCR
from "DATA_LAKE"."PS_FS"."PS_DEPT_TBL"
group by DEPTID
;
有人可能会问,当最大值没有显著性并且有any_value
函数可以得到相同的结果时,为什么要使用max
。原因是any_value当前被标记为不能使用结果集缓存。如果查询符合条件,使用max或min将允许使用结果集缓存。