需要根据“两个”步骤从表中删除记录

时间:2017-08-29 23:29:40

标签: sql sql-server

这是表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中删除

但是它给出了错误而没有显示出期望的结果

1 个答案:

答案 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
                )