Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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_Tsql_Greatest N Per Group - Fatal编程技术网

Sql 基于字符串列从多个记录中提取记录

Sql 基于字符串列从多个记录中提取记录,sql,sql-server,tsql,greatest-n-per-group,Sql,Sql Server,Tsql,Greatest N Per Group,我的表格如下: 我需要创建一个查询,以便获得以下结果(仅突出显示的记录): 我尝试过使用下面这样的东西,但仍然得到了所有的记录,而不仅仅是突出显示的记录 Select EmpPk as [User EmpPK], Activity_PK as [Activity PK], Attempt_Start_Date as [Attempt Start Date], Attempt_Completion_Date as [Attempt Completion Date], Registrati

我的表格如下:

我需要创建一个查询,以便获得以下结果(仅突出显示的记录):

我尝试过使用下面这样的东西,但仍然得到了所有的记录,而不仅仅是突出显示的记录

Select  EmpPk as [User EmpPK],
Activity_PK  as [Activity PK],
Attempt_Start_Date as [Attempt Start Date],
Attempt_Completion_Date as  [Attempt Completion Date],
Registration_Status as  [Registration Status],
Attendance_Status as    [Attendance Status],
EstCrdHrs 
From Employee_Activity                          
Where   ((Attendance_Status='In Progress' AND Registration_Status ='In Progress') 
OR (Attendance_Status='Attended' AND Registration_Status ='Completed'))         

您没有准确描述您希望实现的逻辑

我知道,对于每个
empk
,您都需要记录,其中
attention\u status='Attended'和registration\u status='Completed'
;如果没有这样的记录,那么您需要所有其他记录

如果是这样,您可以用
not exists
来表达:

select t.*
from employee_activity ea
where 
    (
        ea.attendance_status = 'Attended' 
        and ea.registration_status = 'Completed'
    ) or not exists (
        select 1 
        from employee_activity ea1 
        where 
            ea1.empPk = ea.empPk 
            and ea1.attendance_status = 'Attended' 
            and ea1.registration_status = 'Completed'
    )
您还可以使用窗口功能:

select *
from (
    select 
        t.*,
        rank() over(
            partition by empPk 
            order by case when attendance_status = 'Attended' and registration_status = 'Completed' then 1 else 2 end
        ) rn
    from employee_activity
) t
where rn = 1

窗口函数
rank()
orderby
子句将每个员工的“已完成”记录放在第一位;然后,外部查询筛选每个员工排名最靠前的记录(如果没有“完整”记录,则同一客户的所有其他记录将排在第一位)。

请准确描述您希望实现的逻辑。