2017-04-03 2 views
0

ich diese Tabelle genannt employeetimesheets haben:Wie eine Zeile pro Benutzer-ID zu begrenzen

empsheet_id|employee_id|timesheet_status|last_update 

Die Tabelle erlaubt den Manager Zugriff auf alle Blätter die Mitarbeiter Zeit zu haben. Ein Mitarbeiter kann mehrere Stundenzettel haben. Ich möchte nur den neuesten Eintrag pro Mitarbeiter anzeigen. Ich lese in the manual Ich muss eine groupwise-maximale Unterabfrage und left join mit inner join schreiben, aber ich bin mir nicht sicher, wie es hier geht.

Bisher ist dies die Abfrage Ich habe:

$sqlempsheets="SELECT * FROM employeetimesheets JOIN employees ON employeetimesheets.employee_id=employees.employee_id WHERE employeetimesheets.timesheet_status='Pending Approval'"; 
$resultempsheets=mysqli_query($db,$sqlempsheets); 

Antwort

2

Versuchen Sie folgendes:

select * 
from employeetimesheets t 
join (
    select employee_id, 
     max(empsheet_id) as empsheet_id 
    from employeetimesheets 
    group by employee_id 
    ) t2 on t.employee_id = t2.employee_id 
    and t.empsheet_id = t2.empsheet_id 
join employees e on t.employee_id = e.employee_id 
where t.timesheet_status = 'Pending Approval'; 

Oder left join mit:

select t.*, e.* 
from employeetimesheets t 
left join employeetimesheets t2 on t.employee_id = t2.employee_id 
    and t.empsheet_id < t2.empsheet_id 
join employees e on t.employee_id = e.employee_id 
where t.timesheet_status = 'Pending Approval' 
    and t2.employee_id is null; 
Verwandte Themen