Sql server 在7天内删除重复数据
下面是我的表格和示例数据Sql server 在7天内删除重复数据,sql-server,tsql,Sql Server,Tsql,下面是我的表格和示例数据 DECLARE @Employee_Log table(ID int,eid int, ecode varchar(100), emp_startdate date) INSERT INTO @Employee_Log SELECT 1, 1, 'aaa','2019-01-01' UNION ALL SELECT 2, 1, 'aaa','2019-01-05' UNION ALL SELECT 3, 1, 'bbb','2019-01-03' UNION
DECLARE @Employee_Log table(ID int,eid int, ecode varchar(100), emp_startdate date)
INSERT INTO @Employee_Log
SELECT 1, 1, 'aaa','2019-01-01'
UNION ALL
SELECT 2, 1, 'aaa','2019-01-05'
UNION ALL
SELECT 3, 1, 'bbb','2019-01-03'
UNION ALL
SELECT 4, 2, 'aaa','2019-01-03'
UNION ALL
SELECT 5, 1, 'aaa','2019-02-01'
UNION ALL
SELECT 6, 1, 'aaa','2019-02-15'
UNION ALL
SELECT 7, 1, 'aaa','2019-02-19'
UNION ALL
SELECT 8, 1, 'aaa','2019-02-28'
在上面的数据中,我想删除基于eid和ecode的重复。如果emp_开始日期在7天内,则获取最新数据并忽略其余数据
我尝试了以下代码,但是如何添加周范围的条件检查
SELECT
ROW_NUMBER() OVER(PARTITION BY eid,ecode ORDER BY emp_startdate desc) as rownum,
ID,eid,ecode,emp_startdate
FROM @Employee_Log
我希望结果如下所示
ID eid ecode emp_startdate
2 1 aaa 2019-01-05
5 1 aaa 2019-02-01
4 2 aaa 2019-01-03
7 1 aaa 2019-02-19
8 1 aaa 2019-02-28
3 1 bbb 2019-01-03
以下查询将以通俗易懂的英语回答您的问题,但您的示例数据和所需输出与您自己的问题相矛盾:
SELECT *
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY eid , ecode , YEAR(emp_startdate)
, DATEPART(WEEK, emp_startdate)
ORDER BY emp_startdate DESC
) AS rownum
, ID
, eid
, ecode
, emp_startdate
FROM @Employee_Log
) x
WHERE x.rownum = 1;
如果在同一个7天内发生两个以上的事件,我仍然不确定您希望发生什么。但此解决方案将获得所有日期系列中日期差为7天或更少的最新日期
select ID,eid,ecode,emp_startdate
from
(
select ID,
eid,
ecode,
emp_startdate,
datediff(day
,emp_startdate
,lead(emp_startdate)
over
(partition by eid,ecode order by emp_startdate)) l
from @Employee_Log
) a
where l is null or l>7
ID eid ecode emp_startdate
-- --- ----- -------------
3 1 bbb 2019-01-03
2 1 aaa 2019-01-05
5 1 aaa 2019-02-01
7 1 aaa 2019-02-19
8 1 aaa 2019-02-28
4 2 aaa 2019-01-03
如果有三条重复记录,第一条记录在第二条记录的一周内,第二条记录在第一条记录的一周内,会发生什么情况。在这种情况下,什么会被删除?如果emp_开始日期在一周范围内,您指的是一个日历周还是仅仅相隔不超过7天?如果是第一天,你的一周从哪一天开始?一个特定eid的emp_开始日期应该相隔7天再添加一些样本数据…希望现在再次澄清你的问题的相同问题,当你说基于eid和ecode消除重复时,你是如何消除3,1“bbb”的,“2019-01-03”此处的ecode为bbb。编辑了输出..thanksOutput与预期输出不匹配。@SurajKumar是的,我知道,但它与问题中用简单英语提出的内容匹配。在我看来,问题中所期望的输出与问题本身相矛盾。感谢soren的帮助