Как я могу удалить дубликаты строк в моей базе данных сервера SQL - PullRequest
0 голосов
/ 14 июня 2019

enter image description here

У меня есть эта таблица посещаемости с колонками dateinout, checkin, checkout и т. Д., Которые пользователь вводит, когда приходит в офис, и вычитает, когда уходит. Система извлекает данные два раза из сканера отпечатков пальцев. Я хочу удалить строки с более чем одним счетом в одну и ту же дату, где врезка производится с 7 до 11 часов, а также строки с выпиской с той же датой с 11 до 18 часов.

    SELECT
    a.Logid, 
    a.Userid, 
    a.CheckTime,  
    a.Name  

FROM Checkinout a 
JOIN
(SELECT
    userid,
    name,  
    dateinout,  
    Intime,
    Outtime

    FROM att
    WHERE Intime BETWEEN '07:00:00.0000000' AND '11:00:00.0000000'
    AND userid= 37
    GROUP BY userid, dateinout, Intime, Outtime, name
    HAVING COUNT(Intime)>1) b
    ON a.Userid= b.userid
    ORDER BY CheckTime ASC;

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Вы можете использовать cte для удаления дубликатов из таблицы att на основе ваших критериев группировки.

;WITH CTE AS(
SELECT
row_number() over (partition by  userid,dateinout, Intime, Outtime order by date) AS ROWNUMBER,
        userid,
        dateinout,  
        Intime,
        Outtime
    FROM 
        att
    WHERE 
        Intime BETWEEN '07:00:00.0000000' AND '11:00:00.0000000'
        AND userid = 37
 )

 DELETE FROM CTE WHERE ROWNUMBER>1
0 голосов
/ 14 июня 2019

Вы можете сделать шаг за шагом.Во-первых, найдите количество вставок во временном диапазоне:

SELECT COUNT(Logid), userid
FROM Checkinout
WHERE Intime BETWEEN '07:00:00.0000000' AND '11:00:00.0000000'
GROUP BY Logid
HAVING COUNT(Logid) > 1

После того, как вы получили список, вы можете отвлекать свойством нужным вам образом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...