MySQL中如何根据日期条件重复获取同一记录?
在MySQL中根据日期条件重复获取同一记录的解决方案
嘿,我来帮你搞定这个问题!从你的描述来看,你想要的是当原日期或者原日期加30天后的日期满足指定条件时,把同一条记录分别对应不同的日期输出两次,对吧?
首先先明确你的表结构和测试数据:
CREATE TABLE payout ( id INT, p_id INT, payout_date DATE ); INSERT INTO payout VALUES (1, 2, '2018-04-21');
你原来用的OR条件查询只会返回一次符合条件的记录,因为它只是筛选出满足任一条件的行,但不会为每个符合的条件单独生成一条记录。要实现你的需求,我们可以用UNION ALL来拼接两个独立的查询,每个查询对应一个日期条件,同时返回对应的目标日期:
满足你期望结果的查询语句
SELECT id, p_id, payout_date AS `date` FROM payout WHERE payout_date >= '2018-04-20' UNION ALL SELECT id, p_id, '2018-05-20' AS `date` FROM payout WHERE DATE_ADD(payout_date, INTERVAL 30 DAY) >= '2018-05-20';
为什么这样可行?
- 第一个查询:筛选出
payout_date大于等于2018-04-20的记录,返回原日期作为date字段。 - 第二个查询:筛选出原日期加30天后大于等于
2018-05-20的记录,返回你指定的2018-05-20作为date字段。 UNION ALL会把两个查询的结果合并起来,不会去重,这样就能得到两条相同ID但不同日期的记录。
运行这个查询后,你会得到期望的结果:
| id | p_id | date |
|---|---|---|
| 1 | 2 | 2018-04-21 |
| 1 | 2 | 2018-05-20 |
如果你的需求其实是返回加30天后的日期(而不是固定的2018-05-20),只需要把第二个查询里的'2018-05-20'改成DATE_ADD(payout_date, INTERVAL 30 DAY)就可以了。
内容的提问来源于stack exchange,提问作者Mangala Samy
相关产品推荐
相关产品推荐

