今天帮同事处理了一个关于分组筛选的问题,大家可能也遇到过。
需求:
有一张表TABLEA,有ID\UID\GROUPID\STATE\CREATETIME五个字段,查找指定ID中,每个组(GROUPID)中最后一条创建(CREATETIME)的记录状态(STATE)为“A”的所有组(GROUPID)。(注:CREATETIME时间唯一)
步骤:
- 我们需要对TABLEA表中的GROUPID字段进行分组。
- 在每个分组中我们需要查找STATE等于“A”的最后创建时间。
- 然后比较分组中的最后创建时间与STATE为“A”的最后创建时间是否相等来筛选GROUPID
语句:
select A.[GROUPID]
from [dbo].[TABLEA] A
where UID = '1'
group by A.[GROUPID]
having max([CREATETIME]) <> (
select max([CREATETIME])
from [dbo].[TABLEA] B
where B.[GROUPID]= A.[GROUPID]
and [STATE] = 'A'
and [UID] = '1')