Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取第二个重复记录_Sql_Sql Server - Fatal编程技术网

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查询。