有两个表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
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
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');
不是说在这个里面是在这个里面 取出来 是说他比如 4、20是在5月里面 那么5月就不要了 那么如果有个日期是在7月那么8也不要了 CREATE_TIME 这个是不确定的 CLEARING_DATE 这个也是不确定的 测试数据就是前面那些 日期那些
给出两张表的表结构,并根据表结构给出测试数据~~
数据看 题目在“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为提示日期显示在“未按时完成贷后监控”内;
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号的这条数据其他的都要
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)
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
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
我的代码测试是没有问题的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>
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
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
谢谢 不过不对 Lookup Error - MySQL Database Error: Subquery returns more than 1 row