这是表Emp
salid empid yearquarter status type datemodified
1 105 20041 a 3 2017-01-01
2 105 20041 a 4 2017-02-01
3 105 20041 b 4 2017-03-01
4 106 20021 a 3 2016-01-01
5 106 20021 a 4 2016-01-01
6 106 20034 a 3 2017-01-01
7 106 20034 b 4 2017-01-01
步骤1:在yearquarter中,如果有多行类型(3,4)用于雇主,我们需要在年内保留最新的日期记录,其余的应该删除
步骤2:在yearquarter中,如果employeeid有多行类型(3,4),如果报告类型(3,4)具有相同的日期,那么我们需要保留最大记录的记录 其余部分应删除
删除后 EMP表应该左下角
输出
salid empid yearquarter status type datemodified
3 105 20041 b 4 2017-03-01
5 106 20021 a 4 2016-01-01
7 106 20034 b 4 2017-01-01
这些记录由于每个empid的年度最大日期修改问题而被删除
salid empid yearquarter status type datemodified
1 105 20041 a 3 2017-01-01
2 105 20041 a 4 2017-02-01
这些是以下记录,由于每个empid的一年中最大的问题而被删除
salid empid yearquarter status type datemodified
4 106 20021 a 3 2016-01-01
6 106 20034 a 3 2017-01-01
我正在尝试使用
使用案例陈述从EMP中删除
但是它给出了错误而没有显示出期望的结果
答案 0 :(得分:0)
如果salid按时间顺序排列为日期修改,@ ZLK的建议可以使用如下
DELETE
FROM emp
WHERE salid IN (SELECT salid
FROM (SELECT *,
ROW_NUMBER() OVER (PARTITION BY empid, yearquarter ORDER BY datemodified DESC, salid DESC) rnum
FROM emp
WHERE [type] IN (3,4)
) a
WHERE rnum > 1
)