SQL Server: Необходимо выбрать сотрудника с минимальным временем простоя в запросе с функцией min

#sql-server #query-performance

#sql-сервер #запрос-производительность

Вопрос:

Я хочу выбрать employeeID из employee сотрудников с минимальным временем простоя в таблице. Это простой запрос, но я в нем запутался. Я попробовал запрос, подобный этому:

 SELECT    dbo.tbSystemUser.EmployeeID,tbEmployee.Name
FROM      dbo.tbSystemUser INNER JOIN
          dbo.tbEmployee ON dbo.tbSystemUser.EmployeeID = dbo.tbEmployee.EmployeeID
WHERE     (dbo.tbSystemUser.Time = MIN(dbo.tbSystemUser.Time))
  

Но это не работает. Time — это поле, в котором хранится время, имеющее тип данных time.

Комментарии:

1. Что-то вроде выбора первого по величине заказа идентификатора сотрудника по минимальному времени? Вам нужны связи, когда более 1 сотрудника имеют одинаковое минимальное время?

Ответ №1:

Что-то вроде:

 SELECT tbl.*, tbEmployee.name 
FROM (
    SELECT tbSystemUser.employeeid, min(t) AS t
    FROM tbSystemUser JOIN tbEmployee
      ON tbSystemUser.employeeid = tbEmployee.employeeid
    GROUP BY tbSystemUser.employeeid
) tbl, tbEmployee 
WHERE tbl.employeeid = tbEmployee.employeeid 
  AND tbl.t = tbEmployee.t
  

Вот пример данных:

 create table tbSystemUser (
employeeid varchar(10))

create table tbEmployee (
employeeid varchar(10),
name varchar(10),
t integer
)

insert into tbSystemUser values('a')
insert into tbSystemUser values('b')

insert into tbEmployee values('a', 'q', 1)
insert into tbEmployee values('a', 'w', 2)
insert into tbEmployee values('a', 'e', 3)

insert into tbEmployee values('b', 'z', 1)
insert into tbEmployee values('b', 'x', 2)
insert into tbEmployee values('b', 'c', 3)
  

Или еще проще:

 SELECT tbl.*, tbEmployee.name 
FROM (
    SELECT employeeid, min(t) as t 
    FROM tbEmployee
    GROUP BY employeeid) tbl, tbEmployee
WHERE tbl.employeeid = tbEmployee.employeeid
  AND tbl.t = tbEmployee.t