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