日常问题汇总(1) 分组筛选

今天帮同事处理了一个关于分组筛选的问题,大家可能也遇到过。

需求:

  有一张表TABLEA,有ID\UID\GROUPID\STATE\CREATETIME五个字段,查找指定ID中,每个组(GROUPID)中最后一条创建(CREATETIME)的记录状态(STATE)为“A”的所有组(GROUPID)。(注:CREATETIME时间唯一)

步骤:

  1. 我们需要对TABLEA表中的GROUPID字段进行分组。
  2. 在每个分组中我们需要查找STATE等于“A”的最后创建时间。
  3. 然后比较分组中的最后创建时间与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')

  

posted @ 2011-08-23 17:55  白身  阅读(163)  评论(0)    收藏  举报