2012-12-04 99 views
2

我有一個表格報告,像這樣:SQL查詢 - 返回最大時,它= 1

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每個rptdate最大序列。我現在運行查詢,但是,只給時最大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 
+0

你的查詢看起來還好。你確定有幾天最大的dbsseq值是1嗎? –

+0

是的。該序列表示文件的版本。所有文件的日期是月底。有時可能會出現錯誤,因此提交了一個具有相同名稱的新文件,因此第二個文件變爲序列#2。我想查看dbscode的所有報告日期,但只能查看最高的dbsseq#,這將是處理的數據庫。 - 合理? –

+0

「*我想查看**所有**報告日期*」與「*但僅適用於最高dbsseq *」似乎有點矛盾 –

回答

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

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 

+0

謝謝!那樣做了! –