需要从基于“二”一表中删除记录步骤
问题描述:
这是表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语句
但它给错误和不显示期望的结果
答
如果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
)
你可以先显示你的select语句然后你的delete语句 – maSTAShuFu
如果你使用row_number()窗口func在子查询中,通过empid,yearquarter进行分区,并通过datemodified desc,salid desc进行排序,您只需删除行号大于1的行。 – ZLK
我们只需要选择类型(3,4)也是我们不应该删除的其他类型 –