Sql 获取第二个重复记录
我在完成以下连接后得到:Sql 获取第二个重复记录,sql,sql-server,Sql,Sql Server,我在完成以下连接后得到: CompanyID EmpID Emp_no Location -------------------- -------------------- ------------- ------------- 1 24 100543 First.png 1 24
CompanyID EmpID Emp_no Location
-------------------- -------------------- ------------- -------------
1 24 100543 First.png
1 24 100543 Second.png
我想在select查询中使用CASE选择第二条记录,即second.png。检查此项
declare @t table(CompanyID int, empid int, emp_no varchar(50), location varchar(100))
insert into @t values (1,24,100543,'First.png'),(1,24,100543,'Second.png'),(1,25,100544,'Second.png'),(1,25,100544,'First.png')
select * from
(
select
ROW_NUMBER() over(partition by companyid, empid order by companyid, empid ) rowno, *
from
@t
) a where rowno = 2 --and empid = 24 --here you can give empid to get particular employee detail
如果您想在单个select语句中获取多个empid的第二个条目
declare @t table(CompanyID int, empid int, emp_no varchar(50), location varchar(100))
insert into @t values (1,24,100543,'First.png'),(1,24,100543,'Second.png'),(1,25,100544,'Second.png'),(1,25,100544,'First.png')
,(1,26,100545,'First.png')
;with cte as
(
select
*
from
(
select
ROW_NUMBER() over(partition by empid order by empid ) rowno, *
from
@t
) a
),
cte1 as (
select
*,
ROW_NUMBER() OVER(PARTITION BY empid ORDER BY rowno DESC) as RN
from cte
)
select * from cte1 where rn = 1
你可以这样写:
;WITH CTE as
(
SELECT ROW_NUMBER() OVER ( PARTITION BY CompanyID,EmpID,Emp_no ORDER BY (SELECT 1))
AS rownum,CompanyID,EmpID,Emp_no,Location
FROM (SELECT * FROM @Test ) AS T
),CTE1 as
(
SELECT MAX(rownum) AS maxrownum,
CompanyID,
EmpID,
Emp_no
FROM CTE
GROUP BY CompanyID,EmpID,Emp_no
)
SELECT T.CompanyID,T.EmpID,T.Emp_no,T.Location
FROM CTE T
JOIN CTE1 T1 ON T.CompanyID = T1.CompanyID
AND T.EmpID = T1.EmpID
AND T.Emp_no = T1.Emp_no
AND T.rownum = T1.maxrownum
说明:
因为没有像主键那样的列,我们可以通过它来识别
您可以在分区窗口中首先写入SELECT1的行。
一旦获得CompanyID、EmpID和Emp_no的每个组合的行数,就可以使用第二个CTE来获得每个组合的最大行数
结合体
只需从表中收集具有MaxRowNumber的所有行的数据
希望这有帮助:什么决定了第一和第二个?我必须找到这些png文件。是否希望所有行的位置都有“第二个”?显示您的sql查询。