2010-06-10 5 views
5

Ich verwende MySQL und ich habe die folgende Tabelle:Gruppe nach Datumsbereich auf Wochen/Monate Intervall

| clicks | int | 
| period | date | 

Ich mag Berichte wie diese generieren zu können, wo Perioden in den letzten 4 fertig sind Wochen:

| period | clicks | 
| 1/7 - 7/5 | 1000 | 
| 25/6 - 31/7 | .... | 
| 18/6 - 24/6 | .... | 
| 12/6 - 18/6 | .... | 

oder in den letzten 3 Monaten:

| period | clicks | 
| July | .... | 
| June | .... | 
| April | .... | 

Irgendwelche Ideen, wie SELECT-Abfragen zu machen, die die ist gleich generieren nt date range und clicks count?

+1

Sie speichern Ihr Datum als int? Wie sieht dieses Feld aus? – simendsjo

+0

@simendsjo Confusing Formatierung - Ich dachte das gleiche, aber lesen Sie nicht nach unten! –

+0

Entschuldigung für diesen Fehler, es ist ein Feld namens Zeitraum mit Datumstyp. – khelll

Antwort

11
 
SELECT 
WEEKOFYEAR(`date`) AS period, 
SUM(clicks) AS clicks 
FROM `tablename` 
WHERE `date` >= CURDATE() - INTERVAL 4 WEEK 
GROUP BY period 

SELECT 
MONTH(`date`) AS period, 
SUM(clicks) AS clicks 
FROM `tablename` 
WHERE `date` >= CURDATE() - INTERVAL 3 MONTH 
GROUP BY period 

+0

Das ist eine bessere Überprüfung für den Zeitraum, korrigierte ich meine Antwort, um es widerzuspiegeln. – Keeper

+0

Aus Neugier, wie die Abfragen sein sollten, wenn das Zeitraumfeld eine Ganzzahl wie 20100609 ist, die dem Datum 2010-06-09 entspricht. Wäre die Leistung in einem solchen Int-Typ besser? – khelll

+0

Wahrscheinlich nur, wenn Sie eine Reihe von Datumsangaben filtern müssen, da Sie nicht nach Woche filtern können (Sie müssen sie dennoch als Datum umwandeln). Und denken Sie daran, eine Antwort zu wählen: P – Keeper

3

Für die letzten 3 Monate, die Sie verwenden können:

SELECT MONTH(PERIOD), SUM(CLICKS) 
FROM TABLE 
WHERE PERIOD >= NOW() - INTERVAL 3 MONTH 
GROUP BY MONTH(PERIOD) 

oder für die letzten 4 Wochen:

SELECT WEEK(PERIOD), SUM(CLICKS) 
FROM TABLE 
WHERE PERIOD >= NOW() - INTERVAL 4 WEEK 
GROUP BY WEEK(PERIOD) 

-Code nicht getestet.

+0

Ich weiß nicht, ob der Optimierer mit Woche (Periode) funktioniert, ohne alle Daten im Ergebnis zu überprüfen. Deshalb verwende ich WOCHE (Periode) AS WeekPeriod, Group by WeekPeriod – simendsjo

+0

Ich benutze hauptsächlich Oracle, für das Sie nach dem gleichen Feld gruppieren müssen (Sie können damit kein Alias ​​für ein Feld und eine Gruppe erstellen). Ich denke intern ist die Abfrage gleich. – Keeper

Verwandte Themen