select count(*),year(datum),month(datum) from t
group by 2,3 having count(*) = (select max(c)
from (select count(*) c, year(datum),month(datum) from t
group by 2,3) )
Någon har missförstått. Vad menar du med max-antalet? Jag tolkade det som att du vill visa år och månad där det finns flest poster eller vill du bara veta hur många poster det finns för given månad och år?
select count(*),year(datum),month(datum) from t
group by 2,3 having count(*) = (select max(c)
from (select count(*) c, year(datum),month(datum) from t
group by 2,3) )
men jag fick detta felmeddelande:
"Microsoft JET Database Engine fel '80004005'
Du har skrivit en underfråga som kan returnera flera fält utan att använda det reserverade ordet EXISTS i huvudfrågans FROM-instruktion. Ändra underfrågans SELECT-uttryck så att endast ett fält efterfrågas."
c:et i "count(*) c" var jag tvungen att ta bort. Fick felmeddelande. Vad har c:et för funktion egentligen? Sedan stod det att Year(Dat) inte ingick i uttrycket och då la jag in det på ett till ställe tillsammans med group by. Den slutliga SQL-satsen som genererade felmeddelandet ovan ser ut som följande:
select count(*), year(dat), month(dat) from diary group by 2, 3 having count(*) = (select max(c), year(dat), month(dat) from (select count(*), year(dat), month(dat) from diary group by 2, 3) group by 2, 3)
Vad surt att man inte kan formulera sitt problem så att folk förstår! :(
Om jag försöker förklara mitt problem från början kanske det går bättre.
Jag ska göra ett stapeldiagram med utgångspunkt för hur många träningspass varje löpare gör varje månad. Längden på staplarna ska maximalt vara antalet träningspass löparen gör den månad då han tränar mest. Med utgångspunkt från detta maxvärde bestäms sedan längden på de övriga staplarna.
Alltså vill jag få fram antalet träningspass den månad, som löparen har tränat flest träningspass.
Mja, det där kan nog inte fungera förresten. Men det här kanske:
SELECT TOP 1 COUNT(*) AS Antal, theYear, theMonth AS Antal FROM (SELECT DISTINCT Year(Dat) AS theYear, Month(Dat) AS theMonth FROM Diary) GROUP BY 2, 3 ORDER BY 1 DESC
(Jag har redan postat detta ett par gånger, men vi har problem med nätverket)
red: Vid närmare eftertanke kan nog inte det här heller fungera. Men jag försökte i alla fall. ;)
Jaha, jag har inte tillgång till Jet så jag kan inte testa något.
Du skrev att du inte kunde ha med count(*) c och att du fick ett felmeddelande. Att c är med är väldigt väsentligt så det måste vara med. Vad fick du för felmeddelande?
Eftersom du inte är intresserad av vilken månad det är så kan man förenkla frågan något.
select max(c) from (select count(*) as c from diary
group by year(dat),month(dat))