我有一个包含属性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中做到这一点,是否可能?
答案 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