【发布时间】:2016-08-04 07:43:23
【问题描述】:
我必须获取重复记录 如果重复记录之间的日期差异超过 96 小时或 4 天,否则忽略重复条目并返回第一个条目或最早日期的记录。我的桌子是这样的:
ID SDATE
----------- -----------------------
1 2016-04-13 14:54:18.983
1 2016-04-08 12:55:47.907
2 2016-04-13 14:54:18.983
3 2016-04-13 14:54:18.983
4 2016-04-13 14:54:18.983
5 2016-04-13 14:54:18.983
5 2016-04-11 12:55:47.907
6 2016-04-13 14:54:18.983
6 2016-04-13 14:54:18.983
预期结果:
ID SDATE
----------- -----------------------
1 2016-04-13 14:54:18.983
1 2016-04-08 12:55:47.907
2 2016-04-13 14:54:18.983
3 2016-04-13 14:54:18.983
4 2016-04-13 14:54:18.983
5 2016-04-11 12:55:47.907
6 2016-04-13 14:54:18.983
我尝试了以下查询,但它不起作用。
WITH tt AS (
SELECT 1 as ID, GETDATE() as SDATE
UNION ALL
SELECT 1 as ID, '2016-04-09 12:55:47.907' as SDATE
UNION ALL
SELECT 2 as ID, GETDATE() as SDATE
UNION ALL
SELECT 3 as ID, GETDATE() as SDATE
UNION ALL
SELECT 4 as ID, GETDATE() as SDATE
UNION ALL
SELECT 5 as ID, GETDATE() as SDATE
UNION ALL
SELECT 5 as ID, '2016-04-11 12:55:47.907' as SDATE
UNION ALL
SELECT 6 as ID, GETDATE() as SDATE
UNION ALL
SELECT 6 as ID, GETDATE() as SDATE
)
SELECT MIN(SDATE) as SDATE, ID FROM tt as tbl
GROUP BY ID, DATEADD(HH, DATEDIFF(HH,0,SDATE) + 96,0)
【问题讨论】:
-
如果一个
id有以下3条记录怎么办?{'2016-04-01 06:00:00.000', '2016-04-03 18:00:00.000', '2016-04-06 06:00:00.000'}?每条记录相隔不到 4 天,但第一条和最后一条记录相隔 5 天。 -
如果有 3 个重复 ID,第一个日期 -
1/4/2016,第二个日期 -3/4/2016和第三个日期6/4/2016会发生什么情况第二个的副本。应该删除哪个? -
@MatBailie Hah,同样的问题,同样的日期。
-
嗨@MatBailie,如果有超过 2 条记录而不是我们查看的第一个和最后一个日期。
标签: sql sql-server sql-server-2008 tsql group-by