t-sql复杂查询只获得'R'的最大状态

时间:2014-02-05 23:17:08

标签: sql sql-server sql-server-2008 tsql

我想获得状态类型仅为“R”的最大声明状态版本,如果其他状态具有相同的声明ID,我想过滤那些。

以下查询未向我提供所需结果。

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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。

已编辑:按字段更改了顺序并删除了最大值