没有 rowid 或 key 需要最近的行

No rowid or key need most recent row

我正在尽最大努力按日期在 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

会return结果(当然错了)

我在 VS 2013 中使用 ODBC 来构造此查询。

我有一个 table 以下

| 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 |

您可以使用 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;