2

我有一个这样的表格报告:

DBSCODE   RPTDATE     DBSSEQ
AAA       2012-01-31  1
AAA       2012-02-29  1
AAA       2012-02-29  2
AAA       2012-03-31  1
BBB       2012-01-31  1
BBB       2012-01-31  2

我想返回每个dbscodefor each的最大序列的详细信息rptdate。但是,我现在正在运行的查询仅在 max dbsseq> 1 时返回。

我正在执行:

select a.dbscode, a.rptdate, a.dbseq
from REPORTS as a 
inner join 
    (select rptdate, max(dbsseq) as 'Last'
    from REPORTS
    group by rptdate) as b
  on a.rprtdate = b.last 

我的结果是:

DBSCODE, RPTDATE, DBSSEQ
AAA, 2012-02-29, 2
BBB, 2012-01-31, 2 
4

2 回答 2

1

更新

我重新阅读了您的问题,我相信您正在寻找的是这个简单的查询..

SELECT 
  dbscode, rptdate, max(dbsseq)
FROM 
  REPORTS
GROUP BY
  dbscode, 
  rptdate

演示在 http://sqlfiddle.com/#!3/b16ba/13


初步答案

在子查询中,您还需要按DBSCODE.

SELECT 
    a.dbscode, a.rptdate, a.dbsseq
FROM 
    REPORTS as a 
INNER JOIN
    (SELECT 
        dbscode, rptdate, MAX(dbsseq) AS 'Last'
    FROM 
        REPORTS
    GROUP BY dbscode, rptdate) as b
    ON a.dbsseq = b.last 
      AND a.dbscode = b.dbscode
      AND a.rptdate = b.rptdate

于 2012-12-04T22:49:15.867 回答
0
select dbscode, 
       rptdate, 
       dbseq
from (
   select dbscode, rptdate, dbseq,
          row_number() over (partition by dbscode order by rptdate desc) as rn
    from reports
) t
where rn = 1;

如果有多行具有相同的 rptdate,则只返回一个。如果您不希望那样,请使用dense_rank()而不是row_number()

于 2012-12-04T22:48:49.663 回答