Avatar billede judas Nybegynder
07. marts 2003 - 14:27 Der er 24 kommentarer og
3 løsninger

Order by i Order by

Jeg har en tabel der skal sorteres efter to ting. I første omgang skal jeg have sorteret så jeg får de nyeste 100 målinger fra min database (de har et timestamp).
Herefter vil jeg sortere disse målinger efter deres ID.

Jeg har sorteret efter timestamp men hvordan får jeg resultatet heraf sorteret endnu engang efter ID?

SELECT ID, MeasureTime
FROM Measuring
ORDER BY MeasureTime DESC LIMIT 100?
Avatar billede arnvig Nybegynder
07. marts 2003 - 14:32 #1
SELECT ID, MeasureTime
FROM Measuring
where id in (  SELECT ID
              FROM Measuring
              ORDER BY MeasureTime DESC LIMIT 100)
ORDER BY ID
Avatar billede arnvig Nybegynder
07. marts 2003 - 14:33 #2
eller

SELECT ID, MeasureTime
FROM Measuring
where ID in ( SELECT TOP 100 ID
              FROM Measuring
              ORDER BY MeasureTime DESC )
ORDER BY ID
Avatar billede joshin Nybegynder
07. marts 2003 - 14:34 #3
SELECT ID, MeasureTime
FROM Measuring
ORDER BY MeasureTime DESC, ID DECD LIMIT 100
Avatar billede joshin Nybegynder
07. marts 2003 - 14:35 #4
du kan angvive flere kriterier til ORDER By adskilt af komma
Avatar billede fsconsult.dk Nybegynder
07. marts 2003 - 14:39 #5
arnvig> subselects i MySQL?  :-)
Avatar billede jpvj Nybegynder
07. marts 2003 - 14:40 #6
johshin> Der skulle nok have stået ..., ID DESC LIMIT 100, men ellers er jeg enig.

JP
Avatar billede arnvig Nybegynder
07. marts 2003 - 14:42 #7
fsconsult: whooops, men det må da komme en dag ?!? <suk>
Avatar billede arnvig Nybegynder
07. marts 2003 - 14:44 #8
Joshin> er resultatet så ikke sorteret efter Measuretime, istedet for ID ?
Avatar billede fsconsult.dk Nybegynder
07. marts 2003 - 14:51 #9
arnvig> det burde komme i version 4.x.x, så jeg holder mig til den gode gamle stabil version :-)

som joshin skrev det, vil det blive sorteret på MeasureTime først og dernæst ID, hvad vist også var meningen. Det har dog ikke så stor effekt da MeasureTime er et timestamp, og oftest vil være unikt i sig selv.
Avatar billede Slettet bruger
07. marts 2003 - 14:52 #10
ORDER BY MeasureTime, ID DESC

Her sorteres først efter dato, derefter efter id.
Avatar billede arnvig Nybegynder
07. marts 2003 - 15:00 #11
FSC, men så er resulatet vel også sorteret efter measuretime ?

eksempel ORDER BY MeasureTime DESC, ID DECD LIMIT 5

I tabellen

ID , MT
-------

1 , 5
2 , 4
3 , 6
4 , 8
5 , 9
6 , 1
7 , 5

resultat af SQL

5 , 9
4 , 8
3 , 6
1 , 5
7 , 5

og det var jo ikke det der var ønsket ?!?
Avatar billede fsconsult.dk Nybegynder
07. marts 2003 - 15:05 #12
arnvig> han skriver "I første omgang skal jeg have sorteret så jeg får de nyeste 100 målinger fra min database", hvilket for mig lyder som om der ønskes sorteret på MeasureTime primært og ID sekundært.

iøvrigt bliver dit resultat: (DESC efter begge felter, remember!)
5 , 9
4 , 8
3 , 6
7 , 5
1 , 5
Avatar billede arnvig Nybegynder
07. marts 2003 - 15:11 #13
je, det er iokke nemt at agere SQL i hovedet, men det er rigtigt når der er DESC på begge felter. (Faktisk burde det give en syntaks fejl da der står DECD)

Læs lige resten af spørgsmålet:
"Herefter vil jeg sortere disse målinger efter deres ID."

konklusion: Dette kan (endnu) ikke lade sig gøre i eet SQL statement i MySQL.

Ikke sandt ?
Avatar billede Slettet bruger
07. marts 2003 - 15:15 #14
"Herefter vil jeg sortere disse målinger efter deres ID."

Det er da netop det som ORDER BY MeasureTime, ID DESC gør.

Man kan ikke både blæse og have mel i munden, men må sortere med MeasureTime først, og så på ID bagefter.
Avatar billede fsconsult.dk Nybegynder
07. marts 2003 - 15:16 #15
jeg vil også mene at "ORDER BY MeasureTime DESC, ID DESC" gør hvad der bliver bedt om, men det er kun judas der kan fortælle om dette er korrekt opfattet.
Avatar billede arnvig Nybegynder
07. marts 2003 - 15:26 #16
jow jow,

"Jeg har sorteret efter timestamp men hvordan får jeg resultatet heraf sorteret endnu engang efter ID? "

resultatet af queryen skal sorteres efter ID, ikke ?

Med en subselect kan man finde de nyeste 100 measuretimes og sortere disse efter ID i et SQL. Det kan ikke lade sig gøre i MySQL (endnu).
Avatar billede arnvig Nybegynder
07. marts 2003 - 15:27 #17
med andre ord:
med Oracle, DB2 og Access, kan man både blæse og have mel i munden ;-)
Avatar billede Slettet bruger
07. marts 2003 - 15:29 #18
Man kan vel bare lave en JOIN i MySQL ?
Avatar billede arnvig Nybegynder
07. marts 2003 - 15:35 #19
el_barto : Ja ? Må vi se ?
Avatar billede Slettet bruger
07. marts 2003 - 15:40 #20
høhø...nej, det var bare fordi du sagde at man ikke kunne blæse og have mel i munden i MySQL.

Der er vel ingen grund til at klippe den ged mere, det eneste der mangler er feedback fra judas.
Avatar billede judas Nybegynder
07. marts 2003 - 16:29 #21
arnvig > "resultatet af queryen skal sorteres efter ID, ikke ?"

Helt korrekt.
Samtidig skal jeg have de 100 nyeste målinger - men sorteringen efter timestamp er i det endelige resultat ligegyldig.
Avatar billede arnvig Nybegynder
07. marts 2003 - 19:53 #22
Det var det jeg nok mente.
Du er nok nødt til at lave det i 2 trin:

1. SQL query
2. Sortering

Hvilket sprog skriver du i ?
Avatar billede judas Nybegynder
09. marts 2003 - 15:05 #23
Jeg skriver i C++
Håbede bare det kunne lade sig gøre med én enkelt query
Avatar billede arnvig Nybegynder
10. marts 2003 - 11:47 #24
Desværre, du må skrive en lille sort-rutine i C++, eller vælge en bedre (og dyrere ?) DBMS end MySQL.
Avatar billede judas Nybegynder
10. marts 2003 - 17:09 #25
Gør jeg allerede. Det var bare hvis man kunne omgå det i MySQL
Avatar billede judas Nybegynder
10. marts 2003 - 17:10 #26
Der er lige lidt point for indsatsen ;-)
Avatar billede arnvig Nybegynder
10. marts 2003 - 17:23 #27
Smart, udlove 60 og beholde de 40 selv , <suk>
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