2010-06-10 38 views
5

estoy usando MySQL y tengo la siguiente tabla:Grupo por rango de fechas en semanas/meses de intervalo

| clicks | int | 
| period | date | 

Quiero ser capaz de generar informes como éste, donde los períodos se hacen en el último 4 semana:

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

o en los últimos 3 meses:

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

Alguna idea de cómo hacer que las consultas de selección que pueden generar la Equivale ¿El rango de fechas y los clics cuentan?

+1

¿Está almacenando su fecha como un int? ¿Cómo se ve ese campo? – simendsjo

+0

@simendsjo Formato confuso - ¡Pensé lo mismo pero leí no al otro lado! –

+0

disculpa por ese error, es un período archivado con el tipo de fecha. – khelll

Respuesta

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

Ese es un mejor control para el período, corregí mi respuesta para reflejarlo. – Keeper

+0

Por curiosidad, cómo deberían ser las consultas si el campo de período es un número entero como 20100609 que corresponde a la fecha 2010-06-09. ¿El rendimiento sería mejor en ese tipo de int? – khelll

+0

Probablemente solo si necesita filtrar un rango de fechas porque no puede filtrar por semana (todavía tiene que convertirlo en una fecha). Y recuerde elegir una respuesta: P – Keeper

3

Durante los últimos 3 meses se pueden utilizar:

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

o para las últimas 4 semanas:

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

Código no han sido evaluados.

+0

No sé si el optimizador funciona con SEMANA (Período) sin verificar todas las fechas en el resultado. Es por eso que me gusta usar WEEK (Period) AS WeekPeriod, Group by WeekPeriod – simendsjo

+0

Uso principalmente Oracle para lo cual debes agrupar por el mismo campo que seleccionas (no puedes alias un campo y agruparlo). Creo que internamente la consulta es la misma. – Keeper

Cuestiones relacionadas