Sql 比较数据库中的所有行

Sql 比较数据库中的所有行,sql,Sql,我的sql server中有如下表,我需要一个查询来给我一个输出,检查所有EmpID,其中EmpID等于check EmployeeType,其中EmpID中的EmployeeType等于check EmployeeType,请给我具有min StartAction的第一行 如果某个员工的类型发生变化,我也会给我那一行 这是我的示例表,我的记录超过200000条 EmpID Serial EmpType SAction -------------

我的sql server中有如下表,我需要一个查询来给我一个输出,检查所有EmpID,其中EmpID等于check EmployeeType,其中EmpID中的EmployeeType等于check EmployeeType,请给我具有min StartAction的第一行 如果某个员工的类型发生变化,我也会给我那一行

这是我的示例表,我的记录超过200000条

EmpID                Serial      EmpType      SAction
-------------------- ----------- ------------ -----------
10012845             2           5            940705
10012845             3           5            951218
10012845             4           5            960130
10012845             5           5            970419
10012845             6           5            970419
13395353             1           5            921113
13395353             2           5            931116
13395353             3           2            941119
13395353             4           1            951214
13395353             5           1            961713
10013597             1           5            890201
10013597             2           53           921003
10013597             3           53           960320
10013597             4           53           970419
10013597             5           53           970419
我的欲望输出

    EmpID                Serial  EmpType       SAction
-------------------- ----------- ------------ -----------
10012845             2           5            940705
13395353             1           5            921113
13395353             3           2            941119
13395353             4           1            951214
10013597             1           5            890201
10013597             2           53           921003
带有**{description}的行是我想要的行

    EmpID                Serial  EmpType       SAction
-------------------- ----------- ------------ -----------
10012845             2           5            940705** same empid and first EmpType and min SAction
10012845             3           5            951218
10012845             4           5            960130
10012845             5           5            970419
10012845             6           5            970419
13395353             1           5            921113** same empid and first EmpType and min SAction
13395353             2           5            931116
13395353             3           2            941119**same empid and different EmpType and min SAction
13395353             4           1            951214**same empid and different EmpType and min SAction
13395353             5           1            961713
10013597             1           5            890201**same empid and first EmpType and min SAction 
10013597             2           53           921003**same empid and different EmpType and min SAction
10013597             3           53           960320
10013597             4           53           970419
10013597             5           53           970419
更简单的欲望输出

    EmpID                Serial  EmpType       SAction
-------------------- ----------- ------------ -----------
10012845             2           5            940705
13395353             1           5            921113
13395353             3           2            941119
13395353             4           1            951214
10013597             1           5            890201
10013597             2           53           921003

我必须将每个EmpId相互比较,以找到第一个EmpId,如果EmpId与其他EmpId相等,则获取他们的空类型,并获取该EmpId组中所有空类型的距离,这些空类型彼此相等,并获取具有最小值的分隔行。我不知道如何

我已经创建了额外的字段来添加您的评论。我在注释字段中应用了两个
UPDATE
。第一个找到EmpId,EmpType,Saction组合的人。 第二个是相同的查询,但从第一个查询中排除了空类型

--DROP TABLE #Temp
--GO
CREATE TABLE #Temp
(   EmpID       INT
    ,Serial      INT
    ,EmpType     INT 
    ,SAction        INT
    ,Comment        VARCHAR(MAX)
)
INSERT INTO #Temp(EmpID,Serial,EmpType,SAction)
VALUES
 (10012845, 2 , 5  , 940705)
,(10012845, 3 , 5  , 951218)
,(10012845, 4 , 5  , 960130)
,(10012845, 5 , 5  , 970419)
,(10012845, 6 , 5  , 970419)
,(13395353, 1 , 5  , 921113)
,(13395353, 2 , 5  , 931116)
,(13395353, 3 , 2  , 941119)
,(13395353, 4 , 1  , 951214)
,(13395353, 5 , 1  , 961713)
,(10013597, 1 , 5  , 890201)
,(10013597, 2 , 53 , 921003)
,(10013597, 3 , 53 , 960320)
,(10013597, 4 , 53 , 970419)
,(10013597, 5 , 53 , 970419)

UPDATE #Temp SET Comment = '** same empid and first EmpType and min SAction'
FROM (SELECT EmpID
            ,MIN(Serial)  Serial
            ,MIN(SAction)  Saction
        FROM #Temp 
        GROUP BY EmpID) S
WHERE #Temp.EmpID = S.EmpID
AND #Temp.Serial = S.Serial
AND #Temp.SAction = S.Saction

UPDATE #Temp SET Comment = '**same empid and different EmpType and min SAction'
FROM (SELECT T1.EmpID
            ,T1.EmpType
            ,MIN(T1.Serial) Serial
            ,MIN(T1.SAction)  Saction
        FROM #Temp T1
        GROUP BY T1.EmpID,T1.EmpType) S
WHERE #Temp.EmpID = S.EmpID
AND #Temp.Serial = S.Serial
AND #Temp.SAction = S.Saction
AND #Temp.Comment IS  NULL
--AND NOT EXISTS (SELECT 1 
--              FROM #Temp T2 
--              where #Temp.EmpID = t2.EmpID 
--              and T2.EmpType=#Temp.EmpType
--          )

select * from #Temp

您使用的是哪种SQL产品?您使用的是sql server还是mysql,因为它们都被标记了。它们是非常不同的产品。到目前为止,您做了哪些尝试?请共享您以前编写的SQL,以尝试实现此目的。@我使用的是microsoft SQL server 2008R2@Larnu事实上,我对创建sql查询很熟悉。我找不到合适的方法来执行某些操作,所以您没有尝试过?你看过哪些功能?Stack Overflow不是免费的编码服务,当您自己(通过尝试)无法解决问题时,它可以帮助您解决特定的编码问题。感谢您的代码帮助我,并修复我的问题@zeki gumus