mysql 删除日期大于特定日期的行
mysql delete row that have a date greater than a specific date
我有一个table这样的
----------------------
| idDoc | date |
----------------------
| 1 | 2018-01-20 |
| 1 | 2018-07-15 |
| 1 | 2017-07-31 |
| 1 | 2019-01-17 |
| 1 | 2019-07-30 |
| 1 | 2020-01-11 |
| 1 | 2020-07-31 |
| 1 | 2021-01-20 |
| 15 | 2018-11-31 |
| 15 | 2019-03-17 |
| 15 | 2018-05-31 |
| 15 | 2017-05-29 |
| 15 | 2019-09-20 |
| 15 | 2020-12-31 |
| 5 | 2018-01-31 |
| 5 | 2017-07-31 |
| 5 | 2018-04-23 |
| 5 | 2019-11-31 |
| 5 | 2019-12-08 |
----------------------
我希望(通过单个查询)变成这样:
----------------------
| idDoc | date |
----------------------
| 1 | 2017-07-31 |
| 15 | 2017-05-29 |
| 5 | 2017-07-31 |
----------------------
要获取的日期总是较旧的日期,要删除的字段将始终(具有相同的 ID)所有大于它的日期。
有什么建议吗?
如果你想删除数据库中的数据,试试这个:
delete t1
from demo t1
join demo t2
on t1.idDoc = t2.idDoc
and t1.`date` > t2.`date`;
请参阅此处 demo。
如果你想select记录样例数据,试试这个:
select t1.*
from demo t1
join (select idDoc, min(`date`) minDate from demo group by idDoc) t2
on t1.idDoc = t2.idDoc
and t1.`date` = t2.`minDate`;
我会这样处理:
delete t
from t join
(select t2.idDoc, min(t2.date) as mindate
from t t2
group by t2.idDoc
) t2
on t.idDoc = t2.idDoc
where t.date > t2.mindate;
如果你可以指定更多,它并不完全清楚你想要什么,但你可以试试这个查询
select *
FROM mytable
WHERE 1 order by date asc group by idDoc
您可以使用 join 和 date greater than 来实现此目的,请参见 select 的示例:
select * from docData d
LEFT JOIN docMaster m on d.idDoc=m.idDoc
where d.dateDoc>'2018-01-20';
我有一个table这样的
----------------------
| idDoc | date |
----------------------
| 1 | 2018-01-20 |
| 1 | 2018-07-15 |
| 1 | 2017-07-31 |
| 1 | 2019-01-17 |
| 1 | 2019-07-30 |
| 1 | 2020-01-11 |
| 1 | 2020-07-31 |
| 1 | 2021-01-20 |
| 15 | 2018-11-31 |
| 15 | 2019-03-17 |
| 15 | 2018-05-31 |
| 15 | 2017-05-29 |
| 15 | 2019-09-20 |
| 15 | 2020-12-31 |
| 5 | 2018-01-31 |
| 5 | 2017-07-31 |
| 5 | 2018-04-23 |
| 5 | 2019-11-31 |
| 5 | 2019-12-08 |
----------------------
我希望(通过单个查询)变成这样:
----------------------
| idDoc | date |
----------------------
| 1 | 2017-07-31 |
| 15 | 2017-05-29 |
| 5 | 2017-07-31 |
----------------------
要获取的日期总是较旧的日期,要删除的字段将始终(具有相同的 ID)所有大于它的日期。
有什么建议吗?
如果你想删除数据库中的数据,试试这个:
delete t1
from demo t1
join demo t2
on t1.idDoc = t2.idDoc
and t1.`date` > t2.`date`;
请参阅此处 demo。
如果你想select记录样例数据,试试这个:
select t1.*
from demo t1
join (select idDoc, min(`date`) minDate from demo group by idDoc) t2
on t1.idDoc = t2.idDoc
and t1.`date` = t2.`minDate`;
我会这样处理:
delete t
from t join
(select t2.idDoc, min(t2.date) as mindate
from t t2
group by t2.idDoc
) t2
on t.idDoc = t2.idDoc
where t.date > t2.mindate;
如果你可以指定更多,它并不完全清楚你想要什么,但你可以试试这个查询
select *
FROM mytable
WHERE 1 order by date asc group by idDoc
您可以使用 join 和 date greater than 来实现此目的,请参见 select 的示例:
select * from docData d
LEFT JOIN docMaster m on d.idDoc=m.idDoc
where d.dateDoc>'2018-01-20';