没有rowid或key需要最近的行

时间:2016-01-06 21:40:58

标签: sql visual-studio-2013 db2 odbc

我正努力在DB2文件中按日期获取最新行的列表。该文件没有唯一的ID,所以我试图通过匹配一组列来获取条目。我最需要DESCGA,因为这种情况经常发生变化。当它出现时,由于历史原因,他们会保留另一行。

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 |

1 个答案:

答案 0 :(得分: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;