首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用删除sql server数据库中的重复行?

如何使用删除sql server数据库中的重复行?
EN

Stack Overflow用户
提问于 2019-06-14 13:38:18
回答 2查看 99关注 0票数 0

我有一个考勤系统,有日期、签到、结账等列,用户上班打卡,外出打卡。系统从指纹扫描仪机器检索数据两次。我想删除在同一日期超过一个计数的行,打卡时间在上午7点到上午11点之间,结帐的行在上午11点到下午6点之间。

代码语言:javascript
复制
    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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-14 18:06:47

您可以使用cte根据您的分组条件从att表中删除重复项。

代码语言:javascript
复制
;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
EN

Stack Overflow用户

发布于 2019-06-14 14:28:42

你可以一步一步来做。首先,在时间范围内找到插入计数:

代码语言:javascript
复制
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

之后,你得到了列表,你可以通过你需要的属性来分散注意力

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56591989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档