Avatar billede saviola Nybegynder
11. april 2006 - 14:14 Der er 11 kommentarer og
1 løsning

SQL - vælg nr. 2

Kan man med en sql-sætning vælge eks. en vare i en tabel med den ANDEN højeste pris ?

Det vil sige - ikke den med den højeste pris men nr. 2 på listen.

Eller er det nødvendigt at kode sig ud af det ?
Avatar billede weaponx Nybegynder
11. april 2006 - 14:19 #1
Aner ikke om det vil virke, men forsøg Max()-1
Avatar billede weaponx Nybegynder
11. april 2006 - 14:22 #2
funker ikke, tror desværre der skal lidt kode til
Avatar billede ldanielsen Nybegynder
11. april 2006 - 14:23 #3
SELECT TOP 1 VareID FROM tblVare
WHERE VareID NOT IN (SELECT TOP 1 VareID FROM tblVare ORDER BY intPris DESC)
ORDER BY intPris DESC
Avatar billede eagleeye Praktikant
11. april 2006 - 15:19 #4
Hvilken database er det?
Avatar billede kjulius Novice
11. april 2006 - 19:43 #5
Hvad med

SELECT MAX(pris)
FROM tabel
WHERE pris < (SELECT MAX(pris) FROM tabel)
Avatar billede saviola Nybegynder
11. april 2006 - 22:36 #6
i første omgang access database - er mere interresseret i den rette sql sætning..eller et hint..
Avatar billede arne_v Ekspert
11. april 2006 - 23:54 #7
ldanielsens boer virke

men jeg ville nok bare lave en TOP 2 og saa smide det foerste resultat vaek
(af performance hensyn)
Avatar billede kjulius Novice
12. april 2006 - 01:33 #8
Min virker både i Access og DB2. Rimelig hurtig endda.

Men spørgsmålet er også, om det er den næsthøjeste pris, du er interesseret i, eller det er den row som følger efter den row med højeste pris?
Det er da det samme, kunne du måske tænke. Men det er det ikke. Hvis der er to rows, som indeholder den samme (høje) pris, vil idanielsens (og i forlængelse heraf arne_v's) metode returnere den samme pris, da deres metode vil returnere den ROW, der logisk efterfølger den med den højeste pris (også selvom denne faktisk har samme pris).
Min metode vil derimod returnere den næsthøjeste PRIS.
Sådan som jeg læste dit spørgsmål, må det være det rigtige - eller hvad siger du?

Selvfølgelig, hvis der ikke er to rows med samme højeste pris, vil resultatet blive det samme med begge metoder.

Yderligere har min metode den fordel, at den vil kunne porteres til andre databaser, hvilket ikke er tilfældet for den anden, idet TOP instruktionen mig bekendt kun forstås af Microsoft produkter (MS Access og MS SQL).

Forøvrigt - hvis du ønsker mere end bare den næsthøjeste pris returneret, men også andre felter er det naturligvis nødvendigt med en lille udvidelse:

SELECT *
FROM varer
WHERE pris =
(
SELECT MAX(pris)
FROM varer
WHERE pris < (SELECT MAX(pris) FROM varer)
)
Avatar billede arne_v Ekspert
12. april 2006 - 03:11 #9
den SQL kan vel godt returnere mere end en række
Avatar billede kjulius Novice
12. april 2006 - 18:14 #10
Jo, det kan den da. Den vil returnere alle rækker med den næsthøjeste pris.
Avatar billede saviola Nybegynder
01. oktober 2006 - 15:28 #11
vi lukker den her...
Avatar billede kjulius Novice
03. oktober 2006 - 00:03 #12
Og hvad brugte du så? Var ingen af vore løsninger tilfredsstillende?
Tilbagemelding ville være ønskelig...
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