2

次のようなテーブル REPORTS があります。

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

dbscode各for eachの最大シーケンスの詳細を返したいと思いますrptdate。ただし、現在実行しているクエリは、最大値がdbsseq1 より大きい場合にのみ返されます。

私は実行しています:

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を持つ行が複数ある場合は、1つだけが返されます。それを望まない場合は、dense_rank()代わりにを使用してくださいrow_number()

于 2012-12-04T22:48:49.663 に答える