Gå til innhold

spørring: velge den høyeste av ett slag


Anbefalte innlegg

Hei,

 

Nå har jeg prøvd meg frem og tilbake med diverse spørringer, men klarer ikke å få en spørring som:

 

velger raden NAVN_ID distinct hvor TIMESTAMP er høyest...

 

Her er tabellen:

CREATE TABLE `thread_anw` (
 `ID` int(11) NOT NULL auto_increment,
 `NAVN_ID` int(11) NOT NULL default '0',
 `TIMESTAMP` int(11) default '0',
 PRIMARY KEY  (`id`)
)

 

Dette må da være mulig?

 

Jeg ville trodd denne skulle fungere:

 

SELECT distinct(thread_nr) FROM `meet_thread_anw` ORDER BY timestamp DESC

 

men den sorterer veldig rart, og setter ikke den høyeste timestampen øverst....

 

Noen som har forslag?

Lenke til kommentar
Videoannonse
Annonse

kan ikke se at å endre datatype skal endre noe her. Det er jo i bunn og grunn samme prinsipp uansett hvilken type feltet har.

 

Skal prøve å si det enkelt:

 

Høyeste verdi i TIMESTAMP innenfor hvert NAVN_ID skal hentes med spørringen.

 

Det funker ikke å endre til distinct(TIMESTAMP), for da får jeg samtlige rader i tabell igjen ettersom alle er forskjellige, også de med lik NAVN_ID, og jeg ønsker kun å sitte igjen med den siste raden (hvert NAVN_ID's høyeste timestamp) for hver bruker.

Endret av Vonbo
Lenke til kommentar

Mulig du må gjøre en subquery på dette.

Litt psuedokode - utestet:

Select distinct(Navn_ID) as myName from mytable mt1 where timestamp in (select max(timestamp) from mytable mt2 where mt2.navn_id = mt1.MyName)

 

Sjekk denne tråden fra

Remove duplicate data within every month fra newsgroupen Microsoft.public.sqlserver.programming. Muligens litt overkill, men da kan du kanskje få et par hint om hvordan du må gjøre det.

 

Kirikiri

Lenke til kommentar
kan ikke se at å endre datatype skal endre noe her. Det er jo i bunn og grunn samme prinsipp uansett hvilken type feltet har.

 

Skal prøve å si det enkelt:

 

Høyeste verdi i TIMESTAMP innenfor hvert NAVN_ID skal hentes med spørringen.

 

Det funker ikke å endre til distinct(TIMESTAMP), for da får jeg samtlige rader i tabell igjen ettersom alle er forskjellige, også de med lik NAVN_ID, og jeg ønsker kun å sitte igjen med den siste raden (hvert NAVN_ID's høyeste timestamp) for hver bruker.

5938011[/snapback]

Du refererer til to forksjellige tabeller i innleggene dine, men jeg antar at dette er det du er ute etter:

SELECT thread_nr, max(timestamp) FROM `meet_thread_anw` GROUP BY thread_nr DESC

Lenke til kommentar

nå nærmer det seg løsningen her..

 

Beklager forvirringen med referanser til 2 tabeller. Var et forsøk på å gjøre det oversiktelig, men glemte litt...

 

Uansett.. Den siste spørringen din roac var nesten det jeg er ute etter. Dvs det var akkurat de resultatene jeg var ute etter, men nå sorteres de etter thread_nr. Jeg vil ha timestamp sortert i DESC, altså høyeste verdi av timestamp først med tilhørende thread_nr. Jeg ville trodd det skulle fungere å tilføye ORDER BY timestamp DESC på slutten slik:

 

SELECT thread_nr, max(timestamp) FROM `meet_thread_anw` GROUP BY thread_nr DESC ORDER BY timestamp DESC

 

men det blir ikke store endringer. Hvordan kan jeg få disse samme resultatene bare men sortert slik at thread_nr med høyest timestamp komme øverst?

Endret av Vonbo
Lenke til kommentar

nå fant jeg løsningen her..

 

det siste problemet nå var rett og slett bare at kolonnenavnet til timestamp er blitt til max(timestamp), og jeg kan derfor ikke sortere etter bare timestamp. Jeg kan heller ikke si ORDER BY max(timestamp) ettersom funksjonen MAX kalles på ny. Men ved å gi kolonnen nytt navn til stamp kan jeg sortere etter denne.

 

SELECT thread_nr, max(timestamp) AS stamp FROM `meet_thread_anw` GROUP BY thread_nr DESC ORDER BY stamp DESC

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...