2016-01-06 34 views
0

我想盡我所能在DB2文件中按日期獲取最近行的列表。該文件沒有唯一的ID,所以我試圖通過匹配一組列來獲取條目。最重要的是我需要DESCGA,因爲這種變化經常發生。當它出現歷史原因時,它們會保持另一行。沒有rowid或鍵需要最近的一行

SELECT B.COGA, B.COMSUBGA, B.ACCTGA, B.PRFXGA, B.DESCGA 
FROM mylib.myfile B 
WHERE 
(
    SELECT COUNT(*) 
    FROM 
    (
     SELECT A.COGA,A.COMSUBGA,A.ACCTGA,A.PRFXGA,MAX(A.DATEGA) AS EDATE 
     FROM mylib.myfile A 
     GROUP BY A.COGA, A.COMSUBGA, A.ACCTGA, A.PRFXGA 
    ) T 
    WHERE 
     (B.ACCTGA = T.ACCTGA AND 
     B.COGA = T.COGA AND 
     B.COMSUBGA = T.COMSUBGA AND 
     B.PRFXGA = T.PRFXGA AND 
     B.DATEGA = T.EDATE) 
) > 1 

這就是我想要的,到目前爲止我得到0個結果。

如果我刪除

B.ACCTGA = T.ACCTGA AND 

它會返回結果(當然是錯誤的)。

我在VS 2013中使用ODBC來構造此查詢。

我有一個表具有以下

| a | b | descri | date  | 
----------------------------- 
| 1 | 0 | string | 20140102 | 
| 2 | 1 | string | 20140103 | 
| 1 | 1 | string | 20140101 | 
| 1 | 1 | string | 20150101 | 
| 1 | 0 | string | 20150102 | 
| 2 | 1 | string | 20150103 | 
| 1 | 1 | string | 20150103 | 

,我需要

| 1 | 0 | string | 20150102 | 
| 2 | 1 | string | 20150103 | 
| 1 | 1 | string | 20150103 | 
+2

樣本數據和預期的結果都會比非更多在傳達您正在嘗試執行的操作時進行查詢。 –

+0

@GordonLinoff說了什麼,還有表格定義。你正在訪問什麼版本的系統。 – mustaccio

+0

如果你有**沒有**唯一的鍵你主要擰在SQL土地(原生I/O允許奇怪的技巧,禁止重組)你**可能**有一個獨特的_composite_鍵,它是由幾列。 –

回答

0

您可以使用row_number()

select t.* 
from (select t.*, 
      row_number() over (partition by a, b order by date desc) as seqnum 
     from mylib.myfile t 
    ) t 
where seqnum = 1; 
+0

ooooh This Works!@ row_number()ftw – Vinez

+0

@GordonLinoff - 如果你打算給出這樣的答案,我們真的應該把它作爲現有[標籤:最大n-per-group]問題之一的副本來關閉.... –

相關問題