SAP HANA SQL - Return 最大日期和相关属性,但忽略其他记录

SAP HANA SQL - Return max date and related attributes, but ignore other records

我面临的问题是我正在尝试查询 SAP HANA 以返回一个唯一代码列表,这些代码引用了对数据库所做的更改的一个实例。对于下图的一些背景,每个更改都有一个相关的 Site IDProduct No.,我将它们一起用作变量,在为了找出最近日期的 TS 编号

但是,当我使用 SELECT MAX(DATAB) 函数时,它强制我使用 GROUP BY 子句。但是,因为我不能从 GROUP BY 子句中省略 TS Number,所以它 return 全部三个。

对于产品编号站点ID的任何给定组合,有没有办法获取最大日期,并且只有return 该日期的 TS 编号?在此示例中,使用 TOP 1 会很好,但这只是一个缩小的示例,该示例将查看 Product No. 和 [= 的许多组合的查询29=]站点 ID(期望的结果是与该 product/store 组合的最新更改相关的所有 TS 编号 的列表,我将用于连接到另一个查询)。

如有任何帮助,我们将不胜感激。如果需要完整的 table 设计等,以便人们可以尝试复制问题,我会很乐意提供这个,但我希望有一个我没有想到的简单解决方案...

非常感谢

与支持 window 函数的任何其他 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;

请注意,结果是不确定的。但是,您可以(在大多数情况下应该!)通过将 ts_nr 添加到 window order by 子句中的 order by 来使其具有确定性。然后,您将获得相同 MAXDATE 的最高或最低 TS 编号,具体取决于排序顺序。

如果您想要所有 TS 编号,以防同一个 MAXDATE 有多个 TS 编号,请使用 rank() 而不是 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;