Avatar billede s0mmer Nybegynder
25. februar 2010 - 10:43 Der er 5 kommentarer og
1 løsning

Flere select fra samme tabel

Hej eksperter,

Dette burde være ret ligetil, men af en eller anden grund kan jeg ikke få det til at virke. Håber i kan hjælpe.

Lad os sige jeg har en tabel med personer.. dato(datetime) for indsættelse, navn og alder.

De samme 10 personer bliver indsat en gang imellem (nogle gange flere gange dagligt).

Jeg ønsker nu først at fange de 10 nyeste rækker og bagefter sortere disse på alderen. Hvordan gør jeg det?
Avatar billede showsource Seniormester
25. februar 2010 - 11:18 #1
hvis du kun vil ha' samme navn 1 gang:
SELECT DISTINCT(navn) FROM tabel ORDER BY dato, alder DESC LIMIT 10
eller
SELECT DISTINCT(navn) FROM tabel ORDER BY dato DESC, alder ASC LIMIT 10

eller blot de ti nyeste
SELECT navn FROM tabel ORDER BY alder ASC LIMIT 10
Avatar billede s0mmer Nybegynder
25. februar 2010 - 11:25 #2
Hmm.. Desværre ikke helt som ønsket.

Først og fremmest er det MS SQL så LIMIT blir til TOP.. Derudover kan du ikke lave distinct uden at have order by elementer med i din select. Dit forslag oversat til et virkende i MS SQL ville være:

SELECT DISTINCT TOP 10 Navn, datetime, Alder
FROM        Personer
ORDER BY datetime DESC, Alder DESC

Hvilket åbenlyst ikke giver det rigtige resultat.

Og dit sidste forslag opfylder ikke kravene om de nyeste.

Ellers tak for forsøget.
Avatar billede Syska Mester
25. februar 2010 - 11:47 #3
SELECT navn, alder FROM
(
SELECT TOP 10 navn, alder FROM Persons ORDER BY ID DESC
)
AS t1
ORDER BY alder ASC/DESC


ID er en Autoincremental ( ellers brugt din Added datetime )
Avatar billede showsource Seniormester
25. februar 2010 - 11:49 #4
Var ikke klar over at der var så meget forskel på "standard" sql ?
Anyway, den sidste skal jo også ORDER på dato, og ikke alder.

Og forstår nu ikke din oversatte sql, hvor du har distinct på både navn, alder og dato ?

Anyway, skal det være de 10 nyeste, eller de ti nyeste navne ?
Avatar billede s0mmer Nybegynder
25. februar 2010 - 11:58 #5
buzzzz > Virker lige som ønsket.. Dog har jeg et spørgsmål. Har du et forslag hvis det ikke er et fixed antal? Altså at 10 kan variere?

showsource > Der er forskel på om du arbejder med MS SQL eller MySQL, men det er nu ikke det helt store imo. Mht. at ORDER på dato istedet for alder, opfylder det ikke kravet om de nyeste sorteret på alder(læs mit post igen). Tror lidt du har misforstået hvad jeg er ude efter :)
Avatar billede Syska Mester
25. februar 2010 - 13:04 #6
svar.

Ja, altså det kan jo gøres på mange måder alt efter hvor det kaldes fra.

paramters.
SELECT TOP (@Count) * FROM table1;

http://msdn.microsoft.com/en-us/library/ms186734.aspx

Alle måder skal du jo ind og pille i den SQL der bliver genereret eller det du sender med som parameters ... alt efter om det er prepared eller ad-hoc.

mvh
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