求高手指导:如何多次查询?比如
时间       人员
20120910    a
20120910    b
20120910    c
20120911    b
20120911    c
20120911    d
20120912    b
20120912    c
20120912    d这个是数据库表结构,为时间和人员,现需要统计3天内有记录人员,以及2天内有记录人员,以及只有1天记录的人员:
结果应该是
3天内都有记录的:                     b、c    2
只在第一天有记录的,其他2天无记录的: a       1
只在2-3天有记录的,第一天没有记录的: d       1这样一个结果,请问高手如何查询?

解决方案 »

  1.   

    select 人员
    from tb
    group by 人员
    having count(*)=3
      

  2.   

    select 人员
    from tt group by 人员
    having count(distinct 时间)=3
    union all
    select 人员
    from tt group by 人员
    having count(distinct 时间)=2
    union all
    select 人员
    from tt group by 人员
    having count(distinct 时间)=1
      

  3.   

    不能
    3天内都有记录的:sELECT * FROM ttl4 a WHERE EXISTS(SELECT 1 FROM ttl4 WHERE a.`时间`+2=`时间`+0 AND a.`人员`=`人员`
    )
    AND EXISTS(SELECT 1 FROM ttl4 WHERE a.`时间`+1=`时间`+0 AND a.`人员`=`人员`);结果:b c 
    只在第一天有记录的,其他2天无记录的:SELECT * FROM ttl4 a WHERE NOT EXISTS(SELECT 1 FROM ttl4 WHERE a.`时间`+2=`时间`+0 AND a.`人员`=`人员`
    )AND NOT EXISTS(SELECT 1 FROM ttl4 WHERE a.`时间`+1=`时间`+0 AND a.`人员`=`人员` AND a.`时间`<`时间`
    )
    AND a.`时间`<>(SELECT MAX(`时间`) FROM ttl4)结果:a只在2-3天有记录的,第一天没有记录的:
    SELECT * FROM ttl4 a WHERE NOT EXISTS(SELECT 1 FROM ttl4 WHERE a.`时间`+0=`时间`+2 AND a.`人员`=`人员`)
    AND NOT EXISTS(SELECT 1 FROM ttl4 WHERE a.`时间`+0=`时间`+1 AND a.`人员`=`人员` )
    AND a.`时间`<>(SELECT MIN(`时间`) FROM ttl4)
    结果:d