2014-02-05 23 views
0

我想獲得狀態類型只與'R'的最大聲明狀態版本,如果有其他狀態具有相同的聲明ID我想過濾這些。t-sql複雜查詢獲取最大狀態與'R'

以下查詢不會給我所需的結果。

select p.prov_clm_id,p.prov_clm_stat_type,max(p.clm_stat_version) 
from provider_clm_stat p 
WHERE p.provider_clm_stat_type='R' 
GROUP BY p.prov_clm_id,p.provider_claim_status_type 


194 R 1 
231 R 1 
469 R 1 
649 R 1 

如果有其他索賠狀態,我不想在我的結果中顯示它。

select * from provider_clm_stat where prov_clm_id=194 


194 5 B 
194 2 K 
194 3 G 
194 4 Q 
194 7 H 
194 8 P 
194 1 R 
194 6 X 


Required results: 

740 R 1 
+1

'740'來自哪裏需要的結果? –

+0

740是隻有狀態類型'R'的聲明ID – user3120927

+0

您希望聲明ID僅*具有狀態'R'而沒有其他狀態? –

回答

0

如果你想聲明的狀態,只有具有'R'並沒有其他的狀態:

select p.prov_clm_id, p.prov_clm_stat_type, max(p.clm_stat_version) 
from provider_clm_stat p 
GROUP BY p.prov_clm_id, p.provider_claim_status_type 
having max(p.provider_clm_stat_type) = 'R' and 
     min(p.provider_clm_stat_type) = 'R'; 

過濾這裏是having條款聚集後。如果min()max()值均爲'R',則所有值均爲'R'NULL。如果NULL是一個可能性,並要過濾出來,用這個子句:

having max(p.provider_clm_stat_type) = 'R' and 
     min(p.provider_clm_stat_type) = 'R' and 
     count(*) = count(p.provider_clm_stat_type) 
+0

仍然沒有得到所需的結果。我無法過濾單獨收到的索賠。對於相同的聲明ID還有其他狀態類型。 – user3120927

+0

@ user3120927。 。 。如果你正在使用這些查詢 - *沒有'where子句*' - 那麼所有的狀態類型都是相同的並且是'R'。 –

0

我稍微你在找什麼數據,但或許弄得像這樣:

select TOP 1 p.prov_clm_id,p.prov_clm_stat_type, p.clm_stat_version 
from provider_clm_stat p 
WHERE p.provider_clm_stat_type='R' 
ORDER BY p.clm_stat_version desc 

從我所知道的情況來看,小組對你來說什麼都不做,因爲你在分組中擁有Id。

已修改:按字段更改順序並刪除最大值。

+0

我懷疑應用程序不僅僅需要一行,例如所有隻有狀態= R的ID。 –

+0

「我想獲得狀態類型只有'R'的最大聲明狀態版本,並且如果存在具有相同聲明ID的其他狀態,我想過濾這些。」很難破譯,但他確實使用了一個單一的「索賠狀態版本」,在他的例子中,他列出了一行作爲期望的結果。但是,我保留完全錯誤的權利! :) – Scottie