有两个表select * from after_credit_manage a where a.APPLICATION_ID=1275;
        select * from app_repayment_time where APPLICATION_ID=1275;这个是 app_repayment_time 
2011/11/29 0:00:00
2012/2/29 0:00:00
2012/5/29 0:00:00
2012/8/29 0:00:00
2012/11/29 0:00:00
2013/2/28 0:00:00
2013/5/29 0:00:00
2013/8/29 0:00:00
2013/11/29 0:00:00
2014/2/28 0:00:00
2014/5/29 0:00:00
2014/8/29 0:00:00
2014/11/29 0:00:00               这个是   after_credit_manage      2012/4/20 0:00:00现在我要的查询的结果是    2 8  11  除了   5-29号的  等于就是  2-5月做一件事情 5-8月做已经事情  4月20号 就是说明 2-5月这个时间段 已经做了 那么就不要查询出5月SELECT ar.CLEARING_DATE
  FROM after_credit_manage ac, app_repayment_time ar
 WHERE     ac.APPLICATION_ID = ar.APPLICATION_ID
       AND year(ac.CREATE_TIME) = year(ar.CLEARING_DATE)
       AND (month(ac.CREATE_TIME) <= month(ar.CLEARING_DATE))
       AND ac.APPLICATION_ID = 1275
这个是我写的 错了  查出的结果是 
2012/5/29 0:00:00
2012/8/29 0:00:00
2012/11/29 0:00:00
 我要的是2012/2/29 0:00:00
2012/8/29 0:00:00
2012/11/29 0:00:00

解决方案 »

  1.   

    SELECT ar.CLEARING_DATE
    FROM after_credit_manage ac, app_repayment_time ar
    WHERE ac.APPLICATION_ID = ar.APPLICATION_ID
    AND ac.APPLICATION_ID = 1275 AND ar.CLEARING_DATE 
    IN('2012/2/29 0:00:00','2012/8/29 0:00:00','2012/11/29 0:00:00');
      

  2.   


    不是说在这个里面是在这个里面  取出来 是说他比如  4、20是在5月里面  那么5月就不要了 那么如果有个日期是在7月那么8也不要了   CREATE_TIME  这个是不确定的  CLEARING_DATE 这个也是不确定的  测试数据就是前面那些  日期那些
      

  3.   

    很简单的一个SQL问题,但没有描述清楚
    给出两张表的表结构,并根据表结构给出测试数据~~
      

  4.   

    select a.AFTER_CREDIT_MANAGE_ID, a.APPLICATION_ID, a.CREATE_USER_ID, a.VETTING_USER_ID, a.APPROVAL_USER_ID, a.CREATE_TIME, a.STATUS   FROM after_credit_manage aselect  t.APP_REPAYMENT_TIME_ID, t.APPLICATION_ID, t.CLEARING_DATE, t.CYCLE_NUM from app_repayment_time t
    数据看 题目在“2.5标准监控审核”中存在问题,问题是:目前按照精确日的对应日进行校验,
    要求按照产品要求的监控频率录入,期间任意一天录入(包括精确日的,对日在内),
    均可校验,不再视为“未按时完成贷后监控”;若监控期间未录入,则仍以精确日的对日显示;
    起始日:2012.11.29,监控周期-3个月1次,在“未按时完成监控”中,
    显示:2012.2.29、2012.5.29(2次未录入),在“已处理”中,2012.4.20 (已录1次);
    校验显示:(2012.2.29-2012.5.29期间),2012.4.20日已录入,
    则不再计入“未按时完成贷后监控”;(2011.11.29-2012.2.29期间)未录入,
    则以2012.2.29为提示日期显示在“未按时完成贷后监控”内;
      

  5.   

    贴建表及插入记录的SQL,及要求结果出来看看
      

  6.   

    有两个表select * from after_credit_manage a where a.APPLICATION_ID=1275;
       select * from app_repayment_time where APPLICATION_ID=1275;这个是 app_repayment_time  
    2011/11/29 0:00:00
    2012/2/29 0:00:00
    2012/5/29 0:00:00
    2012/8/29 0:00:00
    2012/11/29 0:00:00
    2013/2/28 0:00:00
    2013/5/29 0:00:00
    2013/8/29 0:00:00
    2013/11/29 0:00:00
    2014/2/28 0:00:00
    2014/5/29 0:00:00
    2014/8/29 0:00:00
    2014/11/29 0:00:00 
    这个是 after_credit_manage 2012/4/20 0:00:00
     两个表的这个案件的结果
    请看题目 我 这个是三个月录入一次 比如 4月20 属于在app_repayment_time  2-5月的录入 所以说代表2-5这一期已经录入了 那么查询的结果就是除了5-29号的这条数据其他的都要
      

  7.   

    对,但是这些不是死值  不要说在not in('2012/5/29 0:00:00')   能怎样我早想到了
      

  8.   

    SET @aa='2012-4-20 0:00:00';
    SELECT b.* FROM ttf4 b WHERE b.`app_repayment_time`<>
    (SELECT a.`app_repayment_time` FROM ttf4 a WHERE YEAR(a.`app_repayment_time`)=YEAR(@aa) AND MONTH(a.`app_repayment_time`)>MONTH(@aa)
     ORDER BY a.`app_repayment_time` LIMIT 1) 
      
      

  9.   

    SELECT b.*
      FROM app_repayment_time b
     WHERE     b.CLEARING_DATE <>
                  (SELECT a.CLEARING_DATE
                     FROM app_repayment_time a
                    WHERE     year(a.CLEARING_DATE) = year('2012-4-20 0:00:00')
                          AND month(a.CLEARING_DATE) > month('2012-4-20 0:00:00')  ORDER BY a.CLEARING_DATE LIMIT 1)
           AND APPLICATION_ID = 1275 这个样子没有一点用处
    9551 1275 2012/2/29 0:00:00 3
    9552 1275 2012/5/29 0:00:00 6
    9553 1275 2012/8/29 0:00:00 9
    9554 1275 2012/11/29 0:00:00 12
    9555 1275 2013/2/28 0:00:00 15
    9556 1275 2013/5/29 0:00:00 18
    9557 1275 2013/8/29 0:00:00 21
    9558 1275 2013/11/29 0:00:00 24
    9559 1275 2014/2/28 0:00:00 27
    9560 1275 2014/5/29 0:00:00 30
    9561 1275 2014/8/29 0:00:00 33
    9562 1275 2014/11/29 0:00:00 1
      

  10.   

    没看懂。。
    SELECT temp.CLEARING_DATE_END 
    FROM after_credit_manage ac RIGHT JOIN (
    SELECT ar1.*,MIN(ar2.CLEARING_DATE) AS CLEARING_DATE_END 
    FROM app_repayment_time ar1 
    LEFT JOIN app_repayment_time ar2 
    ON ar1.APPLICATION_ID=ar2.APPLICATION_ID 
    WHERE ar1.CLEARING_DATE<ar2.CLEARING_DATE
    GROUP BY ar1.CLEARING_DATE) temp 
    ON ac.APPLICATION_ID=temp.APPLICATION_ID 
    WHERE LEFT(temp.CLEARING_DATE_END,4)=LEFT(ac.CREATE_TIME,4) AND ac.CREATE_TIME NOT BETWEEN temp.CLEARING_DATE AND temp.CLEARING_DATE_END
      

  11.   

    贴建表及插入记录的SQL,
    我的代码测试是没有问题的mysql> SELECT * FROM TTF4;
    +------+---------------------+
    | ID   | app_repayment_time  |
    +------+---------------------+
    |    1 | 2011-11-29 00:00:00 |
    |    2 | 2012-02-29 00:00:00 |
    |    3 | 2012-05-29 00:00:00 |
    |    4 | 2012-08-29 00:00:00 |
    |    5 | 2012-11-29 00:00:00 |
    |    6 | 2013-02-28 00:00:00 |
    |    7 | 2013-05-29 00:00:00 |
    |    8 | 2013-08-29 00:00:00 |
    |    9 | 2013-11-29 00:00:00 |
    |   10 | 2014-02-28 00:00:00 |
    |   11 | 2014-05-29 00:00:00 |
    |   12 | 2014-08-29 00:00:00 |
    |   13 | 2014-11-29 00:00:00 |
    +------+---------------------+
    13 rows in set (0.00 sec)mysql> SET @aa='2012-4-20 0:00:00';
    Query OK, 0 rows affected (0.00 sec)mysql> SELECT b.* FROM ttf4 b WHERE b.`app_repayment_time`<>
        -> (SELECT a.`app_repayment_time` FROM ttf4 a WHERE YEAR(a.`app_repayment_
    me`)=YEAR(@aa) AND MONTH(a.`app_repayment_time`)>MONTH(@aa)
        ->   ORDER BY a.`app_repayment_time` LIMIT 1) ;
    +------+---------------------+
    | ID   | app_repayment_time  |
    +------+---------------------+
    |    1 | 2011-11-29 00:00:00 |
    |    2 | 2012-02-29 00:00:00 |
    |    4 | 2012-08-29 00:00:00 |
    |    5 | 2012-11-29 00:00:00 |
    |    6 | 2013-02-28 00:00:00 |
    |    7 | 2013-05-29 00:00:00 |
    |    8 | 2013-08-29 00:00:00 |
    |    9 | 2013-11-29 00:00:00 |
    |   10 | 2014-02-28 00:00:00 |
    |   11 | 2014-05-29 00:00:00 |
    |   12 | 2014-08-29 00:00:00 |
    |   13 | 2014-11-29 00:00:00 |
    +------+---------------------+
    12 rows in set (0.00 sec)mysql>
      

  12.   

    结果如何
    SELECT a.CLEARING_DATE
       FROM app_repayment_time a
       WHERE year(a.CLEARING_DATE) = year('2012-4-20 0:00:00')
       AND month(a.CLEARING_DATE) > month('2012-4-20 0:00:00') AND APPLICATION_ID = 1275 ORDER BY a.CLEARING_DATE LIMIT 1
      

  13.   

    select CLEARING_DATE
    from app_repayment_time 
    where CLEARING_DATE<(select CREATE_TIME from after_credit_manage)
    union all
    select CLEARING_DATE
    from app_repayment_time 
    where CLEARING_DATE>(select CREATE_TIME from after_credit_manage)
    order by CLEARING_DATE limit 1,999999
      

  14.   


    谢谢 不过不对 Lookup Error - MySQL Database Error: Subquery returns more than 1 row
      

  15.   

    多谢各位 我已经解决了  查询的话应该从第一个位置开始计算 到下一次的时间如果 after_credit_manage 中的时间在 区间就不查询出来
      

  16.   

    用到三个关键字  DATE_ADD INTERVAL MONTH