获取所有具有最小值SQL Server的项目



这就是表的样子:

----------------------------------
   EmployeeId      Tasks_Count
   1               1
   2               1
   3               2
   4               1
   5               3

我需要查询以使所有员工都有最小的任务数。结果应该是这样:

---------------
   EmployeeId   
   1               
   2               
   4

问题是我使用子查询来计算任务。这是我的代码

SELECT *
FROM (SELECT EmployeeId,
             COUNT(*) AS Tasks_count
      FROM Tasks
      INNER JOIN Status ON Tasks.StatusId=Status.Id
      WHERE Status.Name != 'Closed'
      GROUP BY EmployeeId
      ORDER BY Tasks_count DESC) AS Employee_not_closed
WHERE Tasks_count IN (SELECT MIN(Tasks_count) 
                      FROM Employee_not_closed)

使用 FETCH FIRST WITH TIES

select EmployeeId
from tablename
order by Tasks_Count
fetch first 1 row with ties

您可以在下面尝试 -

select * from tablename
where Tasks_Count in (select min(Tasks_Count) from tablename)

也可以使用RANK()函数进行以下操作。

;with cte as
(
   select Employeeid, rank() over( order by Tasks_Count) rn
   from @table
)
select * from cte where rn=1

您可以使用以下代码我测试了代码及其工作正常。

select EmployeeId from StackOverFlow_3 where Tasks_Count in(select min(Tasks_Count) from StackOverFlow_3)

您可以在子查询上使用JOIN

    select m.EmployeeId 
    from my_table  m
    inner join  
    (
        select min(task_count) min_task
        from my_table 
    ) t  on t.min_task = m.task_count

相关内容

最新更新