Databases: SQL query using group by and having

Databases: SQL query using group by and having

Door: Arnout van der Vorst

Suppose you have a database containing employee information, where the table structure is roughly:

temployee
employeeid
firstname
lastname
...

tcontract
employeeid
contractnumber
date_end

Table “temployee” holds 1 record for every employee, while tcontract holds multiple contracts per employee. If you need to get a result set containing 1 single record per employee and the combined latest date_end per record, use the following SQL query structure:

select employeeid,
firstname,
lastname,
tcontract1.date_end
from temployee,
tcontract tcontract1,
tcontract tcontract2
where temployee.employeeid = tcontract1.employeeid
and temployee.employeeid = tcontract2.employeeid
group by temployee.employeeid,
firstname,
lastname
having tcontract1.date_end = max(tcontract2.date_end)
order by temployee.employeeid

If the date_end is empty for unlimited contracts you will run into a problem with the above query, since only real date values are taken into account for each record. To remedy this use the following query structure (SQL server only, replace “isnull” with “nvl” and “getdate()” with “sysdate” on Oracle):

select employeeid,
firstname,
lastname,
isnull(tcontract1.date_end, getdate() + 1000)
from temployee,
tcontract tcontract1,
tcontract tcontract2
where temployee.employeeid = tcontract1.employeeid
and temployee.employeeid = tcontract2.employeeid
group by temployee.employeeid,
firstname,
lastname
having isnull(tcontract1.date_end, getdate() + 1000) = max(isnull(tcontract2.date_end, getdate() + 1000))
order by temployee.employeeid

Arnout van der Vorst

Geschreven door:
Arnout van der Vorst

Maak kennis met Arnout van der Vorst, de inspirerende Identity Management Architect bij Tools4ever sinds het jaar 2000. Na zijn studie Hogere Informatica aan de Hogeschool van Utrecht is hij begonnen als Supportmedewerker bij Tools4ever. Daarna heeft Arnout zich opgewerkt tot een sleutelfiguur in het bedrijf.  Zijn bijdragen strekken zich uit van klantondersteuning tot strategische pre-sales activiteiten, en hij deelt zijn kennis via webinars en artikelen.

Anderen bekeken ook

De vooroordelen van Single Sign On

De vooroordelen van Single Sign On

29 november 2011

SAP koppeling met Active Directory

SAP koppeling met Active Directory

06 september 2012

RBAC: sleutelrol, beheer en evolutie

RBAC: sleutelrol, beheer en evolutie

15 maart 2011

Single Sign On met terminal emulatie (VAX64, AS/400, Linux, SSH)

Single Sign On met terminal emulatie (VAX64, AS/400, Linux, SSH)

14 oktober 2010

User- en toegangsbeheer in cloud applicaties: een uitdaging

User- en toegangsbeheer in cloud applicaties: een uitdaging

04 september 2012