【发布时间】:2021-04-30 07:20:06
【问题描述】:
我需要从表中删除重复的行,其中行之间的时间差为
table : clockdates
+-----+------------+--------------+------------+
| ID | date | time | empnum |
+-----+------------+--------------+------------+
| 1 | 2021/04/01 | 08:00:00 | emp1 |
| 2 | 2021/04/01 | 08:01:00 | emp1 |
| 3 | 2021/04/01 | 10:00:00 | emp1 |
| 4 | 2021/04/01 | 16:30:00 | emp1 |
| 5 | 2021/04/01 | 16:32:00 | emp1 |
| 6 | 2021/04/01 | 17:00:00 | emp2 |
| 7 | 2021/04/01 | 17:03:00 | emp2 |
+-----+------------+--------------+------------+
预期结果:
table : clockdates
+-----+------------+--------------+------------+
| ID | date | time | empnum |
+-----+------------+--------------+------------+
| 1 | 2021/04/01 | 08:00:00 | emp1 |
| 3 | 2021/04/01 | 10:00:00 | emp1 |
| 4 | 2021/04/01 | 16:30:00 | emp1 |
| 6 | 2021/04/01 | 17:00:00 | emp2 |
| 7 | 2021/04/01 | 17:03:00 | emp2 |
+-----+------------+--------------+------------+
我尝试了以下代码,但它只会删除时间完全相同的行(10:00:00 和 10:00:00)。我不知道如何使用@DupTime。 (@DupTime 是分钟)
CREATE PROCEDURE [dbo].[DelDup]
@fDate date
AS
DECLARE @DupTime INT = (SELECT [DupTime] FROM [dbo].[ProgramOptions])
WITH CTE([empnum],
[date],
[time],
duplicatecount)
AS (SELECT [empnum],
[date],
[time],
ROW_NUMBER() OVER(PARTITION BY [empnum],
[date],
[time]
ORDER BY ID) AS DuplicateCount
FROM [dbo].[clockdates])
DELETE FROM CTE
WHERE ClockDate >= @fDate AND DuplicateCount > 1
【问题讨论】:
标签: sql sql-server tsql