Avatar billede excession Nybegynder
21. oktober 2004 - 00:58 Der er 8 kommentarer

Hent kun seneste

Hej

Jeg henter lidt data fra nogle tabeller, men jeg vil gerne have at der for hver Manuscript.m_id hentes kun det seneste Process data...

Jeg troede jeg kunne bruge DISTINCT, men det ser ikke ud til at virke

En simplificeret eksempel på det jeg får ud er:

ID1 | process1
ID1 | process2
ID2 | process1

Det resultat jeg gerne vil have er :

ID1 | process2
ID2 | process1

SQL'en ser sådan ud

SELECT
    Manuscript.m_id, Manuscript.uniqueIDCountry,
    Manuscript.uniqueIDNo, Manuscript.m_title,
    Manuscript.country, Manuscript.m_receivedDate, 
    Process.p_id, Process.m_id, Process.processDate, 
    ProcessTypes.ps_id, ProcessTypes.processName
FROM
    Manuscript,
    Process,
    ProcessTypes
WHERE [Process].m_id = [Manuscript].m_id
AND [Process].ps_id =  [ProcessTypes].ps_id

På forhånd tak!
Avatar billede hmortensen Nybegynder
21. oktober 2004 - 09:29 #1
Hvad med GROUP BY ?
Avatar billede aaberg Nybegynder
21. oktober 2004 - 09:33 #2
Hvis det er toppen af dine resultater du skal have, kan du bruge TOP. Den virker sådan:

SELECT TOP 15 PERCENT *
FROM myTabel

returnerer top 15 procent af din tabel

eller:

SELECT TOP 50 *
FROM myTabel

returnerer de første 50 resultater.
Avatar billede excession Nybegynder
21. oktober 2004 - 09:41 #3
Nej det er ikke helt det jeg gerne vil..

Som I nok kan se indeholder tabellerne noget data om manuasckripter.
Jeg vil gerne hente hver manuskript fra databasen og så vil jeg hente den seneste process, som den har fået.

I process tabellen kan en manuscript forekomme mange gange, men det er den seneste jeg vil hente.

Med ovenstående SQL kommer manuskripten for hver gang den er repræsenteret i Process tabellen.
Avatar billede aaberg Nybegynder
21. oktober 2004 - 09:51 #4
Så skal du nok følge hmortensens eksempel, og bruge GROUP BY

SELECT Manuscript.m_id
FROM Manuscript
GROUP BY Manuscript.m_id

Så vil der kun komme en af hver m_id.
Avatar billede excession Nybegynder
21. oktober 2004 - 10:00 #5
Det ser ikke ud til at virke...
Denn fejl kommer for mange af felterne:
Column 'Manuscript.uniqueIDCountry' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

SELECT
    Manuscript.m_id, Manuscript.uniqueIDCountry,
    Manuscript.uniqueIDNo, Manuscript.m_title,
    Manuscript.country, Manuscript.m_receivedDate, 
    Process.p_id, Process.m_id, Process.processDate, 
    ProcessTypes.ps_id, ProcessTypes.processName
FROM
    Manuscript,
    Process,
    ProcessTypes
WHERE [Process].m_id = [Manuscript].m_id
AND [Process].ps_id =  [ProcessTypes].ps_id
GROUP BY Manuscript.m_id
Avatar billede arne_v Ekspert
21. oktober 2004 - 18:25 #6
Prøv:

SELECT
    Manuscript.m_id, Manuscript.uniqueIDCountry,
    Manuscript.uniqueIDNo, Manuscript.m_title,
    Manuscript.country, Manuscript.m_receivedDate,
    p1.p_id, p1.m_id, p1.processDate,
    ProcessTypes.ps_id, ProcessTypes.processName
FROM
    Manuscript,
    Process p1,
    ProcessTypes
WHERE p1.m_id = Manuscript.m_id
AND p1.ps_id =  ProcessTypes.ps_id
AND p1.p_id = (SELECT MAX(p2.p_id) FROM Process p2 WHERE p2.m_id = p1.m_id)
Avatar billede excession Nybegynder
21. oktober 2004 - 18:31 #7
ja, jeg havde faktisk lige fundet ud af det:

SELECT
Manuscript.m_id,
Manuscript.uniqueIDCountry,
Manuscript.uniqueIDNo,
Manuscript.m_title,
Manuscript.country,
Manuscript.m_receivedDate,
Process.p_id,
Process.m_id,
Process.processDate,
ProcessTypes.ps_id,
ProcessTypes.processName
FROM Manuscript
JOIN Process ON [Manuscript].m_id = [Process].m_id
JOIN ProcessTypes ON [Process].ps_id = [ProcessTypes].ps_id
WHERE
[Process].processDate=(SELECT MAX(processDate) FROM [Process]
WHERE [Process].m_id=[Manuscript].m_id)
ORDER BY uniqueIDCountry, uniqueIDNo
Avatar billede aaberg Nybegynder
21. november 2008 - 15:37 #8
Var det ikke på tide at lukke dette spm?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester