2014-07-05 1 views
2

Je souhaite sélectionner employeeID du employee avec le temps d'inactivité minimum dans la table. C'est une requête simple mais je suis confus avec cela. J'ai essayé une requête comme ceci:SQL Server: nécessité de sélectionner un salarié avec le temps d'inactivité minimum dans une requête avec la fonction min

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)) 

Mais cela ne fonctionne pas. Le temps est le champ qui stocke le temps et est de l'heure du type de données.

+0

Quelque chose comme Select top 1 ordre employeeID par minimumTime? Avez-vous besoin de TIES lorsque plus d'un employé a le même temps minimum? –

Répondre

1

Quelque chose comme:

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 

Voici des exemples de données:

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) 

Ou encore plus simple:

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 
Questions connexes