/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Søgning i to rækker samtidig?
Fra : Arne Feldborg


Dato : 24-05-05 23:30


Hejsa.

Jeg ved ikke rigtig hvordan jeg skal forklare mit problem. Men idet jeg
flere gange tidligere har fået god og kvalificeret hjælp her i gruppen
prøver jeg alligevel.

Jeg har brug for at lave en søgning hvor en betingelse skal være opfyldt
i en given række - og hvor en anden betingelse skal være opfyldt i den
næst følgende række.

Alså noget a'la:
"select * from table.name where firstname = 'Peder' and (firstname i den
næste række = 'Maren');"

Jeg kan selvfølgelig først finde alle rækker med 'Peder', og så i hvert
enkelt tilfælde checke den næste række for 'Maren'. Men der må være en
mere elegant måde.??


--
mvh, A:\Feldborg

Folketællinger Hammerum og Bølling herreder, kirkebøger Hammerum herred
http://www.haunstrup.dk/feldborg/genealogi/download/

 
 
Nis Jorgensen (25-05-2005)
Kommentar
Fra : Nis Jorgensen


Dato : 25-05-05 00:42

On Wed, 25 May 2005 00:30:11 +0200, Arne Feldborg
<feldborg@haunstrup.dk> wrote:

>
>Jeg har brug for at lave en søgning hvor en betingelse skal være opfyldt
>i en given række - og hvor en anden betingelse skal være opfyldt i den
>næst følgende række.
>
>Alså noget a'la:
>"select * from table.name where firstname = 'Peder' and (firstname i den
>næste række = 'Maren');"
>
>Jeg kan selvfølgelig først finde alle rækker med 'Peder', og så i hvert
>enkelt tilfælde checke den næste række for 'Maren'. Men der må være en
>mere elegant måde.??

Raekkerne i en tabel har ingen raekkefoelge. Der er ikke nogen "naeste
raekke" med mindre du angiver en ording. Lad os derfor antage at du
har en (unik) kolonne "nr" som du oensker ordnet efter:

CREATE TABLE tabel (nr integer, firstname text);

Du kan nu fx bruge

SELECT * FROM tabel t1, tabel t2
WHERE t1.firstname = 'Peder' AND t2.firstname = 'Maren'
AND t2.nr = (SELECT Min(nr) FROM tabel where nr > t1.nr)

eller en af mange andre formuleringer af den samme forespoergsel.

Skal dette goeres ofte, kan det maaske betale sig at lave et view:

CREATE VIEW tabel_naeste AS
SELECT t1.*, (SELECT Min(nr) FROM tabel t2 WHERE t2.nr > t1.nr) naeste
FROM tabel t1

Denne kan du saa joine med "tabel" for at faa dit resultat

SELECT * FROM tabel_naeste t1 INNER JOIN tabel t2 on t1.naeste = t2.nr
WHERE t1.firstname = 'Peder' AND t2.firstname = 'Maren'


--
Nis Jorgensen
Midlertidigt uden ae oe og aa. Jeg beklager.

Arne Feldborg (25-05-2005)
Kommentar
Fra : Arne Feldborg


Dato : 25-05-05 22:15

Nis Jorgensen <nis@superlativ.dk> skrev Wed, 25 May 2005 01:42:23 +0200

>Raekkerne i en tabel har ingen raekkefoelge. Der er ikke nogen "naeste
>raekke" med mindre du angiver en ording. Lad os derfor antage at du
>
Det har du naturligvis ret i, dårlig formulering fra min side. Men som
du ganske rigtig gætter på, så har hver række et unikt fortløbende
nummer.

>SELECT * FROM tabel t1, tabel t2
>WHERE t1.firstname = 'Peder' AND t2.firstname = 'Maren'
>AND t2.nr = (SELECT Min(nr) FROM tabel where nr > t1.nr)
>
Tak for forslaget og for de andre forslag, nu har jeg noget at arbejde
videre med.


--
mvh, A:\Feldborg

Folketællinger Hammerum og Bølling herreder, kirkebøger Hammerum herred
http://www.haunstrup.dk/feldborg/genealogi/download/

Nis Jorgensen (25-05-2005)
Kommentar
Fra : Nis Jorgensen


Dato : 25-05-05 23:27

On Wed, 25 May 2005 23:14:57 +0200, Arne Feldborg
<feldborg@haunstrup.dk> wrote:

>
>Det har du naturligvis ret i, dårlig formulering fra min side. Men som
>du ganske rigtig gætter på, så har hver række et unikt fortløbende
>nummer.

Jeg gaar specifikt IKKE ud fra at numrene er fortloebende. Det er fx
ikke garanteret med de fleste autonummereringer, sequences osv.

Hvis nummereringen virkelig er fortloebene (eller skal antages at
vaere det) kan du slippe meget nemmere omkring det. Fx

SELECT * FROM tabel t1, tabel t2
WHERE t1.firstname = 'Peder' AND t2.firstname = 'Maren'
AND t1.nr + 1 = t2.nr
--
Nis Jorgensen
Midlertidigt uden ae oe og aa. Jeg beklager.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste