webForumDet fria alternativet

Även få med veckor utan värden vid GROUP BY YEARWEEK(d)?

Databaser & SQL

5 svar · 497 visningar · startad av erciz

Medlem sedan maj 20011 826 inlägg
Frågan#1

Jag använder MySQL och har en SELECT-sats, som hämtar värden från olika veckor och olika år. Finns det nåt knep för att få med även alla veckor som inte har ett värde, och få NULL-värden på de veckorna?

Nuvarande kod:

SELECT SUM(daysum) AS weeksum, YEARWEEK(date, 3) AS week 
FROM table WHERE user = userID GROUP BY YEARWEEK(date, 3)

Men med den koden så får jag bara ut de veckor som har värden. Vill gärna få med de veckor som inte har värden också. Annars får jag lösa det på annat sätt.

EDIT: Tycker att det är ganska coolt att den här tråden kommer med bland Googles sökresultat 5 min efter att jag skrev tråden.

Medlem sedan maj 2000144 inlägg
#2

Hade du använt ms sql 2005 eller nyare hade jag kunnat ge dig ett kod exempel med en CTE.

Nu finns inte CTE:er i mysql och jag har inte arbetat något med MySQL men du skulle kunna göra något i stil med:

create #tmp (id int)
declare @id int
set @id = 1
while  @id <= 52
begin
  insert into #tmp values (@id)
  set @id += 1
end

SELECT SUM(tt.daysum) AS weeksum, t.id as week 
FROM #tmp t
left outer join table tt on t.id = YEARWEEK(tt.date, 3) and  tt.user = userID  
GROUP BY t.id
Medlem sedan maj 20011 826 inlägg
#3

adde2 skrev:

Hade du använt ms sql 2005 eller nyare hade jag kunnat ge dig ett kod exempel med en CTE.

Nu finns inte CTE:er i mysql och jag har inte arbetat något med MySQL men du skulle kunna göra något i stil med:

Intressant lösning. Visste inte att CTE:er fanns innan. Men finns ju inte i MySQL som sagt. Försöker lösa det i PHP, utanför databasfrågan nu. Det går nog bra det också, men en SQL-lösning hade varit snyggt!

Medlem sedan aug. 20039 340 inlägg
#4

Jag sitter och pular med en lösning, men sliter mitt hår eftersom jag inte kan få while-loopen jag försöker göra att rulla! (Får syntaxfel hela tiden)

Medlem sedan maj 20011 826 inlägg
#5

nitro2k01 skrev:

Jag sitter och pular med en lösning, men sliter mitt hår eftersom jag inte kan få while-loopen jag försöker göra att rulla! (Får syntaxfel hela tiden)

while-loopen? i MySQL?

Är det nån typ av Stored Procedure du försöker med eller kan man göra loopar å sånt i vanliga SQL-satser? låter intressant.

Medlem sedan maj 2000144 inlägg
#6

mitt exempel var på MS SQL server syntax,
googlade på while och mysql hittade detta:

DECLARE v1 INT DEFAULT 5;

  WHILE v1 > 0 DO
    ...
    SET v1 = v1 - 1;
  END WHILE;

istället för att bara köra ett enda sqluttryck borde du väl kunna köra ett script?
mitt ursprungliga kodexempel är att betrakta som ett script...

annars så kan du ju skapa en vanlig tabell som har 52 rader och joina på den istället för en temp tabell som i exemplet.

254 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)