有一个表
名称 日期 是否确认
id1  19号  是
id1  22号  是
id2  23号  是
id2  24号  是
id3  25号  是
id1  25号  是
两个查询条件,假设今天是27号
1、7天内,确认次数大于1次的id
并且
2、10天内,确认次数大于2次的id目标结果是id1这个id被选出来

解决方案 »

  1.   

    1
    select *
    from tb
    where 日期>'20号'
    group by 名称
    having count(*)>11
    select *
    from tb
    where 日期>'17号'
    group by 名称
    having count(*)>2
      

  2.   

    谢谢LS,不过这样的查询语句我会写,我遇到的问题是两个查询条件取交集的时候不知道怎么弄,用了group by having就会导致第二个查询的语句的结果全部合并了,说白了,就是我不知道怎么把两条语句的结果取交集之前我是把两个查询这样写的
    select * from
     (select *,count(*) from tb where julianday('now','start of day')-julianday(日期)<7 group by 名称 having count(*)>1) 
    where julianday('now','start of day')-julianday(日期)>10 group by 名称 having count(*)>2然后查询一得到的结果是
    id1 25号 是 2次
    id2 24号 是 2次
    查询二就变成从上面的结果里找,肯定是找不到了小白对概念比较糊涂,不知道有没有把问题说明白了,请指点
      

  3.   

    select 名称
    from 有一个表 a
    where 日期>=curdate()-internal 7 day
    and 2<=(select count(*) from 有一个表 where 日期>=curdate()-internal 10 day and 名称=a.名称)
      

  4.   

    谢谢版主,可以用,我需要的语句实际查询条件比目前这个复杂,如果我还要增加多个查询条件,并且可以随意组合,刚自己试了下,还是不会写表A
    名称 日期 是否确认 类型
    id1  19号  是              X
    id1  22号  是              X
    id2  23号  是              Y
    id2  24号  是              Y
    id3  25号  是              X
    id1  25号  是              X
    id4  18号  是              Z
    id4  19号  是              Z
    id5  25号  是              X
    id5  26号  是              X
    id6  25号  是              X
    id6  26号  是              X表B
    名称  金额 是否报销
    id1    20          否
    id2    8            是
    id3    7            否
    id4    25          否
    id5    5            是
    id6    15          是假设今天是27号
    条件一:表A中  7天内,确认次数大于等于1次的id --》id1、id2、id3、id5、id6
    条件二:表A中  10天内,确认次数大于等于2次的id --》id1、id2、id4、id5、id6
    前两条用版主的语句可以完成
    条件三:表A中  5天内,类型为X的id --》id1、id3、id5、id6
    条件四:表B中  金额大于10的id --》id1、id4、id6
    条件五:表B中  是否报销为‘是’的id --》id2、id5、id6所有条件如果都用上的话,结果就是id6
    如果要任意组合这些条件的话,我的理解是不是用类似case语句来写,写这样的语句的思路是怎样的,谢谢