如何在三个月的时间内保留一行数据并删除其他数据?

时间:2018-05-23 05:21:11

标签: mysql sql

我有一个包含属性date, name, sex, id, status的表格 date的格式为datetime。

我希望按name, sex, id进行分组,只在三个月窗口中保留一个数据并删除其他行。

例如

2017-12-01, A, MALE, 123
2017-10-01, A, MALE, 123
2017-09-01, A, MALE, 123
2016-08-02, A, MALE, 123
2017-09-01, B, MALE, 123
2016-08-02, B, MALE, 123

我只希望在这三个属性后的三个月窗口中保留任何行

2017-09-01, A, MALE, 123 (any first three rows work)
2016-08-02, A, MALE, 123
2017-09-01, B, MALE, 123
2016-08-02, B, MALE, 123

我怎么能在SQL中做到这一点,是否可能?

2 个答案:

答案 0 :(得分:1)

也许这会有所帮助:

select name,sex,id
from table
group by name,sex,id
having datediff(mm,date,getdate())<3

如果你想删除,你应该改为datediff&gt; 3

答案 1 :(得分:0)

这个解决方案没问题:

select min(date) over (partition by name,sex,id) as dmin,
max(date) over (partition by name,sex,id) as dmax
from table
where datediff(mm,dmin,dmax)<3
相关问题