06. september 2005 - 22:59
Der er
3 kommentarer og
1 løsning
Hvordan gør jeg med denne SQL distinct?
SELECT jobs.job_id, Sum(timer.timer) AS SumOftimer, timer.oprettet, ansatte.brugernavn, ansatte.ansatte_id, jobs.jobnavn, kunder.firma
FROM ((ansatte INNER JOIN ansatte_job ON ansatte.ansatte_id = ansatte_job.ansatte_id) INNER JOIN (jobs INNER JOIN timer ON jobs.job_id = timer.job_id) ON ansatte_job.job_id = jobs.job_id) INNER JOIN kunder ON jobs.kunde_id = kunder.kunde_id
GROUP BY jobs.job_id, timer.oprettet, ansatte.brugernavn, ansatte.ansatte_id, jobs.jobnavn, kunder.firma;
Jeg skal have jobs.job_id til at være DISTICT.
Samtidligt at give en sum for timerne som er brugt.
Den lister af en eller anden grund flere med det samme jobid.
dvs.
job_id SumOftimer oprettet brugernavn ansatte_id jobnavn firma
3 1 05-09-2005 hugo 4 Web1 M1
3 3 06-09-2005 hugo 4 Web1 M1
4 3 16-08-2005 hugo 4 Web2 M2
Prøv at se, her fremkommer 3 to gange?
Har du en ide?
07. september 2005 - 01:39
#1
Det er fordi du har oprettet to rows i tabellen "timer" med samme jobid, men med forskellig oprettelsesdato.
Hvis du skal bruge oprettelsesoplysningen, er du nødt til at afgøre om du er interesseret i datoen for den første registrering, eller den sidste registrering. Med andre ord, er du nødt til at bruge MIN(timer.oprettet) eller MAX(timer.oprettet):
SELECT jobs.job_id, Sum(timer.timer) AS SumOftimer, MIN(timer.oprettet) AS FørstOprettet, ansatte.brugernavn, ansatte.ansatte_id, jobs.jobnavn, kunder.firma
FROM ((ansatte INNER JOIN ansatte_job ON ansatte.ansatte_id = ansatte_job.ansatte_id) INNER JOIN (jobs INNER JOIN timer ON jobs.job_id = timer.job_id) ON ansatte_job.job_id = jobs.job_id) INNER JOIN kunder ON jobs.kunde_id = kunder.kunde_id
GROUP BY jobs.job_id, ansatte.brugernavn, ansatte.ansatte_id, jobs.jobnavn, kunder.firma;
Alternativt kan der naturligvis også være tale om en fejl, at der er to oprettelser...