Avatar billede starf Nybegynder
03. oktober 2013 - 09:52 Der er 7 kommentarer og
1 løsning

sql select, count og sortere på time.

Jeg forsøger at få antal entrys i en database ud fra hvornår på dagen de er logget ind.. altså "hour" det vil jeg genre have listet så det kommer i den rette række følge. Men på alle de måder jeg har forsøgt, kommer det ud, uden at komme i den rette række følge. f.eks.

time 7 - time 8 - time 9 - time 23 - time 22 - time 21

når den skulle out putte det sådan her:

time 21 - time 22- time 23 - time 7 - time 8 - time 9

hvis det giver mening, kan nogle se hvad jeg gør fejl?


SELECT HOUR(fulldate) AS `hour`, DAY(fulldate) AS `day`, COUNT(username) AS `count` FROM log WHERE fulldate > DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY `hour` ORDER BY fulldate ASC
03. oktober 2013 - 14:26 #1
Du vil have udtræk fra de sidste 24 timer sorteret først på `day` og indenfor hver af de to mulige dage sorteret på `hour`.  Ikke testet, men jeg vil tro du i din SELECT kan erstatte ORDER BY fulldate med ORDER BY `day`, `hour`
Avatar billede starf Nybegynder
03. oktober 2013 - 14:39 #2
ser ikke ud til at virke, giver samme output.
Avatar billede bauerdata Nybegynder
03. oktober 2013 - 18:17 #3
prøv group by day, hour
03. oktober 2013 - 19:30 #4
Det du viser i dit oprindelige spørgsmål er ikke dit dataudtræk (for eksempel forekommer 'time' ikke i din select.  Er det en formattering i for eksempel en php applikation, og kan det være der problemet ligger?  Jeg lavede en lille tabel medkolonnerne fulldate og username, fyldte nogle data i, og kørt din query og fik dette resultat:

hour day count
12      2      3
21      2      1
22      2      1
23      2      1
13      3      2
14      3      2
15      3      1

hvilket er hvad jeg forstod du er ude efter, altså sorteret per day og indenfor hver day sorteret per hour.

Hvad er det direkte resultat af din query?
Avatar billede starf Nybegynder
04. oktober 2013 - 08:37 #5
nu har jeg lige prøvet igen, her er 2 billeder af min query der er kørt, så i kan se outputtet:

http://i.imgur.com/8Td3Oi0.jpg

har prøvet både med desc/asc timerne kommer til at ligge forkert, som i kan se ligger timerne forkert.

Der ud over undre det mig distint giver nogle på day 4, som den anden ikke gør. selv om det er samme query...

her er samme kørsel bare med distint username
http://i.imgur.com/eOGHwrW.jpg
Avatar billede starf Nybegynder
04. oktober 2013 - 08:51 #6
det der nok forvirre mig er at denne her virker åbenbart fint:

SELECT HOUR(fulldate) AS `hour`, DAY(fulldate) AS `day`, COUNT(Distinct username) AS `count` FROM log WHERE fulldate > DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY `hour` ORDER BY `day`, `hour` asc


mens denne her undlader at tage nogle med for idag f.eks:

SELECT HOUR(fulldate) AS `hour`, DAY(fulldate) AS `day`, COUNT(username) AS `count` FROM log WHERE fulldate > DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY `hour` ORDER BY `day`, `hour` asc

hvilke jo betyder det ser ud som den ikke virker.. nogle bud på hvorfor den undlader day 4, som jo er idag?
Avatar billede bauerdata Nybegynder
04. oktober 2013 - 09:04 #7
SELECT HOUR(fulldate) AS `hour`, DAY(fulldate) AS `day`, COUNT(username) AS `count` FROM log WHERE fulldate > DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY `day`, `hour` ORDER BY `day`, `hour` asc
Avatar billede starf Nybegynder
04. oktober 2013 - 09:07 #8
mange tak det løste problemet.
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