Avatar billede stanz2002 Nybegynder
28. marts 2003 - 11:38 Der er 11 kommentarer og
1 løsning

SQL - vælge den anden sidste række i DB'en!

Hej..

Hvordan er det man vælgen en bestemt række ud.. det jeg skal bruge er informationerne i fx anden sidste række i access databasen..

Hvordan ser SQL sætningen ud til det..

Altså SELECT 'anden sidste linie'...
Avatar billede lumse Nybegynder
28. marts 2003 - 12:50 #1
Hvis du har et numerisk ID på din Tabel kan det gøres således:

SELECT *
FROM [tabel]
WHERE ID = (SELECT MAX (ID) AS MaxID FROM [tabel])-1

Dette går dog ikke hvis du begynder at slette records i din tabel.
Jeg tænker lige over om der måske er en bedre løsning
Avatar billede stanz2002 Nybegynder
28. marts 2003 - 12:54 #2
okay.. jeg skal bruge det til at udtrække de tre nyeste rækker i en database - efter datoen de er indtastet (eller de tre højste auto_id), men kan ikke bruge SELECT TOP 3, da de ikke skal være samme sted på siden.. så jeg skal bruge et udtryk til hver af de tre rækker.. :-) håber du forstår hvad jeg søger efter :-)
Avatar billede lumse Nybegynder
28. marts 2003 - 13:11 #3
Det burde da være muligt at lægge dit resultat i en variabel og trække dem ud hvor du har lyst. (det kan det ihvertilfælde i PHP, hvad bruger du?), og så som du selv foreslår bruge TOP
Noget lignene:

SELECT TOP 3 id AS topID
FROM [tabel]
ORDER BY id DESC
Avatar billede stanz2002 Nybegynder
28. marts 2003 - 13:17 #4
Jeg bruger ASP.. men hvis jeg bruger TOP 3, hvordan får jeg den så til at skrive den første et sted mens den andet er i en helt anden tabel på siden..
Avatar billede lumse Nybegynder
28. marts 2003 - 13:25 #5
Jeg kender ikke ASP, men bruger PHP (jeg tror ikke forskellen er så stor)
Sådan her ville jeg gøre i PHP:

$sql = "SELECT TOP 3 id AS topID FROM [tabel]ORDER BY id DESC";

$result = mssql_query ( $sql );
(det første resultat):
$row = mssql_fetch_array ( $result );
(Nu har du så $row, der indeholder et array med den første linie i resultatet)
$row = mssql_fetch_array ( $result );
(Nu indeholder $row den anden linie i resultatet)

Uden at ligge hovedet på blokken, vil jeg mene at der må være lignene funktioner i ASP.
Avatar billede lumse Nybegynder
28. marts 2003 - 13:26 #6
Jeg kigger stadig på at lave tre querys, hvis det er det du gerne vil have. De bliver dog lige lovlige lange i forhold til hvad jeg mener de skal være.
Avatar billede lumse Nybegynder
28. marts 2003 - 13:35 #7
Jeg har lige overset at du selvfølgelig skal have hele rækken med ud, så ser queryen såleds ud:

SELECT *
FROM tabel
WHERE id = ( SELECT TOP 3 id AS topId FROM tabel ORDER BY id DESC )
Avatar billede stanz2002 Nybegynder
28. marts 2003 - 13:40 #8
jah.. jeg sidder også lige og prøver mig lidt frem.. det hjælper nogen gange.. men jah det mest simple vil jo være hvis jeg havde tre seperate SQL sætninger, hvor de hver især giver en række - henholdsvis nr 1, 2 og 3 :-)
Avatar billede lumse Nybegynder
28. marts 2003 - 13:52 #9
Denne giver hele rækken med det højeste id

SELECT *
FROM tabel
WHERE id =
    (SELECT TOP 1 id AS topId
    FROM tabel
    ORDER BY id DESC)
-----
Denne giver hele rækken med det 2. højeste id

SELECT *
FROM tabel
WHERE id =
    (SELECT TOP 1 id AS topId
    FROM tabel
    WHERE id IN
        (SELECT TOP 2 id AS topId
        FROM tabel
        ORDER BY id DESC)
    ORDER BY id ASC)
-----
Denne giver hele rækken med det 3. højeste id

SELECT *
FROM tabel
WHERE id =
    (SELECT TOP 1 id AS topId
    FROM tabel
    WHERE id IN
        (SELECT TOP 3 id AS topId
        FROM tabel
        ORDER BY id DESC)
    ORDER BY id ASC)

Håber dette kan bruges, og at du selv kan skifte ud i navne mm.
Avatar billede stanz2002 Nybegynder
28. marts 2003 - 14:01 #10
okay.. det kan jeg godt se sytemet i... så jeg prøver mig lidt frem senere.. har ik mere tid lige nu nemlg.. men mange tak for hjælpen :-)
Avatar billede stanz2002 Nybegynder
28. marts 2003 - 14:18 #11
hej igen.. kunne alligevel ikke lade være med at prøve lidt endnu.. det du skrev virkede ikke, da den ikke gav nogle data.. men jeg skrev den lidt om og det her virker vist :-)

for anden sidst:

SELECT *
FROM news
WHERE news_id =
  (SELECT MIN(news_id)
  FROM news
  WHERE news_id IN
    (SELECT TOP 2 news_id
      FROM news
      ORDER BY news_id DESC))

for 3. sidst:

SELECT *
FROM news
WHERE news_id =
  (SELECT MIN(news_id)
  FROM news
  WHERE news_id IN
    (SELECT TOP 3 news_id
      FROM news
      ORDER BY news_id DESC))
Avatar billede lumse Nybegynder
28. marts 2003 - 14:31 #12
Selv tak. Det er samme princip du bruger. Men min virker altså i Query Analyzer, den er skam testet.

Din er faktisk lidt mere elagant, så tillykke.
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