SAP HANA SQL - 返回最大日期和相关属性,但忽略其他记录
问题描述:
我面临的问题是我正在试图查询SAP HANA以返回一个唯一代码列表,这些代码引用正在进行的更改的一个实例一个数据库。对于下面图片的一些背景,每个更改都有一个相关的站点ID和产品编号,我将它们作为变量一起使用,以找出最新日期的TS号码。SAP HANA SQL - 返回最大日期和相关属性,但忽略其他记录
然而,当我使用SELECT MAX(DATAB)
功能,它迫使我使用GROUP BY
条款。但是,因为我不能省略GROUP BY
子句中的TS号码,所以它将返回全部三个。
是否有一种方式来获得最大日期,产品编号和网站ID的任何组合,并且只返回TS数那天?在这个例子中,可以使用TOP 1
,但这只是一个查询的缩小例子,它将查看许多产品编号和站点ID的组合(其中期望的结果是全部列表TS号码 s与那个产品/商店组合的最近更改有关,我将用它来连接另一个查询)。
任何帮助,将不胜感激。如果需要全表设计等,使人们可以尝试复制的问题,我会很乐意提供这个,但我希望有一个简单的解决方案,我都没有想到的......
非常感谢
答
正如在任何其他支持窗口函数的SQL-DB,可以使用row_number()或rank()函数来获得所需的结果。使用哪一个取决于你想如何处理联系值。
如果你只是想只有一个TS-数的情况下有对同一MAXDATE多个TS-数,使用下面的SQL:
select dat, ts_nr, pr_nr, site
from
(select *, row_number() over (partition by pr_nr, site order by dat desc) rownum
from mytab
)
where rownum = 1;
要知道,结果是不确定性。但是,您可以(应该在大多数情况下)通过在窗口顺序by子句中将顺序添加到顺序中来使其具有确定性。然后,根据排序顺序,您可以获得相同MAXDATE的最高或最低TS编号。
如果你希望所有的TS-数的情况下,有几个TS-号码为同一MAXDATE,使用秩(),而不是ROW_NUMBER(),像这样:
select dat, ts_nr, pr_nr, site
from
(select *, rank() over (partition by pr_nr, site order by dat desc) ranknum
from mytab
)
where ranknum = 1;
请出示您所查询试过。 –