2017-09-12 145 views
0

我面臨的問題是我正在試圖查詢SAP HANA以返回一個唯一代碼列表,這些代碼引用正在進行的更改的一個實例一個數據庫。對於下面圖片的一些背景,每個更改都有一個相關的站點ID產品編號,我將它們作爲變量一起使用,以找出最新日期的TS號碼SAP HANA SQL - 返回最大日期和相關屬性,但忽略其他記錄

然而,當我使用SELECT MAX(DATAB)功能,它迫使我使用GROUP BY條款。但是,因爲我不能省略GROUP BY子句中的TS號碼,所以它將返回全部三個。

是否有一種方式來獲得最大日期,產品編號網站ID的任何組合,並且只返回TS數那天?在這個例子中,可以使用TOP 1,但這只是一個查詢的縮小例子,它將查看許多產品編號站點ID的組合(其中期望的結果是全部列表TS號碼 s與那個產品/商店組合的最近更改有關,我將用它來連接另一個查詢)。

任何幫助,將不勝感激。如果需要全表設計等,使人們可以嘗試複製的問題,我會很樂意提供這個,但我希望有一個簡單的解決方案,我都沒有想到的......

非常感謝

+0

請出示您所查詢試過。 –

回答

1

正如在任何其他支持窗口函數的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; 
相關問題