Avatar billede donslund Nybegynder
12. april 2003 - 08:58 Der er 14 kommentarer og
2 løsninger

group by Måned

Jeg har et datetime-felt i en MySQL database (xxxx-xx-xx xx:xx:xx).
Jeg vil gerne kunne sige group by måned, men hvordan får jeg hevet måned ud af min datetime, så jeg kan gruppere?
Avatar billede donslund Nybegynder
12. april 2003 - 09:01 #1
rent faktisk, så skal den grupere efter både måned og år, da jeg vil have alle de poster der er i en given måned et bestemt år.
Avatar billede fsconsult.dk Nybegynder
12. april 2003 - 09:04 #2
Brug MONTH og YEAR funktionerne i MySQL:

SELECT ...
ORDER BY YEAR(min_dato) ASC, MONTH(min_dato) ASC
Avatar billede twm Nybegynder
12. april 2003 - 09:05 #3
select * from ditabel where ditdatofelt>'01-02-03' and ditdatofelt<'01-03-03'
Er en metode, jeg kigger lige i dokumentationen og ser om der er en indbygget funktion
Avatar billede twm Nybegynder
12. april 2003 - 09:07 #4
select YEAR(min_dato) as ayear, MONTH(min_dato) as amonth from tabel
så kan du og bruge dataene i felterne
Avatar billede twm Nybegynder
12. april 2003 - 09:08 #5
feks
... WHERE ayear='2003' and amonth='4'
Avatar billede donslund Nybegynder
12. april 2003 - 09:24 #6
jeg kan sgu ikke rigtigt komme igang synes jeg ikke.

Hvis der i min tabel findes en dato beliggende i januar 2003 (ex. 2003-01-10 00:00:00), så skal min side udskrive et link 'Januar 2003'. Det skal den også gøre for alle andre måneder der findes i tabellen, men naturligvis kun en gang for hver måned.
Er der nogen der kan tænke en smart måde at komme igang på?
Jeg har tænkt noget med for-løkker eller sådan...
Avatar billede fsconsult.dk Nybegynder
12. april 2003 - 09:31 #7
SELECT DISTINCT YEAR(min_dato) AS my_year, MONTH(min_dato) AS my_month
ORDER BY YEAR(min_dato) ASC, MONTH(min_dato) ASC

Så vil du få år og måned der findes i tabellen, og kun en forekomst af år/måned.

Du kan evt. benytte:
SELECT DATE_FORMAT(min_dato, "%M %Y")
ORDER BY YEAR(min_dato) ASC, MONTH(min_dato) ASC

Hvor du så får "January 2003" (eller hvad sprog MySQL nu er sat op til at bruge som default).
Avatar billede twm Nybegynder
12. april 2003 - 09:31 #8
select YEAR(min_dato) as ayear, MONTH(min_dato) as amonth from tabel Group by ayear, amonth
Avatar billede donslund Nybegynder
12. april 2003 - 09:36 #9
det ser ud til, at twm's forslag er det der er simpelst. Jeg har lavet en sætning der ser således ud:
strSQL1 = "Select * from galleri group by MONTH(dato), YEAR(dato)"

og det ser ud til at virke, så hvorfor alt det der med 'select as'?
Avatar billede fsconsult.dk Nybegynder
12. april 2003 - 09:42 #10
"select as" bruger du når du vil benytte et beregnet felt i dit program.

med "Select * from galleri group by MONTH(dato), YEAR(dato)" får du sorteret først på måned og dernæst år (januar 2001, januar 2002, februar 2001 osv).

desuden kan du kun benytte "select *" hvis du ikke har andre felter i galleri tabellen end dato. ved GROUP BY skal du alle felter i SELECT enten stå i GROUP BY eller være aggregerede felter (MIN, MAX, COUNT, SUM)
Avatar billede donslund Nybegynder
12. april 2003 - 09:52 #11
Det var en god forklaring. men fsconsult.dk din sql-sætning fejler:

strSQL1 = "SELECT DISTINCT YEAR(dato) AS my_year, MONTH(dato) AS my_month ORDER BY YEAR(dato) ASC, MONTH(dato) ASC"

SQLState: 42000
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near 'ORDER BY YEAR(dato) ASC, MONTH(dato) ASC' at line 1
Avatar billede twm Nybegynder
12. april 2003 - 09:53 #12
jeg brugte as i eksemplet så du fik år og måned ud som enkelt værdier. AS navngiver bare det der står foran as, eks:
select id, "noget tekst" as etnavn from tabel

så vil der i alle rækker være et felt med navn etnavn indeholdende "Noget Tekst"
Husk altid på at hvis du bruger de indbyggede funktioner på database serveren, vil det næste altid give bedre performance, end hvis du gør det lokalt i koden (specielt ASP og PHP). SQL serveren er toptunnet til at udføre netop de funktioner.
Avatar billede fsconsult.dk Nybegynder
12. april 2003 - 09:54 #13
SELECT DISTINCT YEAR(dato) AS my_year, MONTH(dato) AS my_month
FROM galleri
ORDER BY YEAR(dato) ASC, MONTH(dato) ASC
Avatar billede donslund Nybegynder
12. april 2003 - 09:55 #14
Der skal da noget from tabel ind et eller andet sted?
Avatar billede donslund Nybegynder
12. april 2003 - 10:04 #15
Nu kører det. Tak for hjælpen. Jeg tror nu egentlig I var lige gode, så jeg deler ponitene. Fortsat god lørdag.
Avatar billede twm Nybegynder
12. april 2003 - 10:05 #16
I lige måde! ;)
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