2010-06-10 15 views
5

używam MySQL i mam poniższej tabeli:Grupa według zakresu dat w tygodniach/miesiącach przedziale

| clicks | int | 
| period | date | 

Chcę być w stanie generować raporty jak ten, gdzie terminy są wykonywane w ciągu ostatnich 4 tydzień:

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

lub w ciągu ostatnich 3 miesięcy:

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

pomysłów, jak zrobić kwerend wybierających, które może generować equivale Czy zakres dat i liczba kliknięć się liczy?

+1

Twoje przechowywanie daty jako int? Jak wygląda to pole? – simendsjo

+0

@simendsjo. Mylące formatowanie - Myślałem tak samo, ale przeczytałem tylko nie! –

+0

Przepraszam za ten błąd, jest to plik o nazwie period z datą. – khelll

Odpowiedz

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

To jest lepsza kontrola w tym okresie, poprawiłem odpowiedź, aby to odzwierciedlić. – Keeper

+0

Z ciekawości, jak powinny wyglądać zapytania, jeśli pole okresu jest liczbą całkowitą, np. 20100609, co odpowiada dacie 2010-06-09. Czy wydajność byłaby lepsza w takim rodzaju int? – khelll

+0

Prawdopodobnie tylko wtedy, gdy musisz filtrować zakres dat, ponieważ nie możesz filtrować według tygodnia (musisz jeszcze przesłać go jako datę). Pamiętaj, aby wybrać odpowiedź: P – Keeper

3

Przez ostatnie 3 miesiące można użyć:

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

lub w ciągu ostatnich 4 tygodni:

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

kod nie testowane.

+0

Nie wiem, czy optymalizator działa z TYGODNI (okres) bez sprawdzania wszystkich dat w wyniku. Właśnie dlatego lubię używać TYGODNIA (Okres) AS Tygodniowy, Grupuj według Tygodnia – simendsjo

+0

Używam głównie Oracle, dla którego musisz grupować według tego samego pola, które wybrałeś (nie możesz aliasować pola i grupy przez to). Myślę, że wewnętrznie zapytanie jest takie samo. – Keeper