2017-09-03 1 views
1

J'ai table MySQL avec présence des employés. première rangée d'un jour d'employé traitant comme dans le temps et la dernière rangée d'un jour d'employé traitant comme dehors le temps. J'essaie de sélectionner le premier et le dernier (heure minimum et heure maximum) de la table de présence. Cela devrait me donner deux séries de rangées. mais ma requête ne me donne pas comme j'attends le résultat.Mysql obtenir rangée max et rangée min du groupe de chaque rangée

Tableau (présence)

Attendance Table with employees attendance (IMAGE)

Ma Recherche

select *, min(attdate) as intime, max(attdate) as outtime from attendance where empid=1 

Mais surtout requête ne me donne pas comme résultat attendu. Ma sortie devrait être en dessous de l'image. S'il vous plaît me suggérer la requête ou donnez-moi un indice pour atteindre un résultat donné.

Attendance out put should be (IMAGE)

Répondre

1

cela peut être fait par des sous-requêtes dans lequel conditions.

SELECT * FROM attendance AS c WHERE empid=1 and (
attdate=(select min(attdate) from attendance where attendance.empid=c.empid) 
or attdate=(select max(attdate) from attendance where attendance.empid=c.empid) 
); 
0

Malheureusement, MySQL ne propose pas de fonctions de fenêtre, il est donc un peu plus difficile ici. Vous pouvez utiliser EXISTE:

Select * from yourtable t 
Where not exists (select 1 from yourtable s 
           Where t.empid = s.empid and 
             (s.attndate < t.attndate or s.attndate > t.attndate)) 

Bien qu'il semble que vous devez ajouter une autre condition t.date = s.date sauf si vous avez seulement des enregistrements 1 jour stockés il