需要从基于“二”一表中删除记录步骤

问题描述:

这是表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如果对于employerid类型多行(3,4),我们需要保持最新的日期记录在每年四分之一,其余应删除

第2步:在总部,如果有多行的类型(3,4)为employerid和如果报告类型(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 

这些是要因为最大datemodified问题与在yearquarter每EMPID

salid empid yearquarter status type datemodified 
1  105  20041  a  3  2017-01-01 
2  105  20041  a  4  2017-02-01 

删除的记录被留这些是由于最大的问题而被删除的以下记录,在每年的一个四分之一秒内被删除

salid empid yearquarter status type datemodified 
4  106  20021  a  3  2016-01-01 
6  106  20034  a  3  2017-01-01 

我想使用

从EMP删除与case语句

但它给错误和不显示期望的结果

+1

你可以先显示你的select语句然后你的delete语句 – maSTAShuFu

+1

如果你使用row_number()窗口func在子查询中,通过empid,yearquarter进行分区,并通过datemodified desc,salid desc进行排序,您只需删除行号大于1的行。 – ZLK

+0

我们只需要选择类型(3,4)也是我们不应该删除的其他类型 –

如果salid是按时间顺序datemodified,@ 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 
       )