SQL - Query complicada

 
Vista:

Query complicada

Publicado por Marta (1 intervención) el 07/10/2011 11:01:05
Buenos días,

Tengo un reto de query, que no sé si es obtenible directamente por SQL o haría falta código.

Os cuento.

Imaginaos una tabla con 3 columnas: Fecha, Usuario, Evento

¿Como puedo hacer una query que devuelva aquellos usuarios que han tenido el evento X más de, por ejemplo, 3 veces en un mes?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Query complicada

Publicado por Javier estrella (1 intervención) el 09/10/2011 20:35:46
Buenas,

No recuerdo como hacerlo, pero si que se puede realizar. De cabeza, me suena que debes realizar un filtro al group by usando el having. Casi seguro que la solución se encuentra agrupando.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Query complicada

Publicado por jams (16 intervenciones) el 12/10/2011 22:02:37
no mencionas que manejador de BD estas usando, el siguiente ejemplo funciona con sql server, si no es este el manejador que usas busca si existe o la equivalencia en el que tu utilizas

declare @tabla table(fecha datetime,usuario varchar(20),evento int)

insert into @tabla values ('01-01-2011','tono',1)
insert into @tabla values ('01-01-2011','tono',1)
insert into @tabla values ('01-01-2011','viky',2)
insert into @tabla values ('01-01-2011','viky',2)
insert into @tabla values ('01-01-2011','pau',1)


select fecha,usuario,evento,count(*) as numero from @tabla
group by fecha,usuario,evento
having count(*) > 1


saludos y suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Query complicada

Publicado por Marcelo Ruggiero (1 intervención) el 01/08/2014 05:06:56
Creo que la respuesta de jams te devuelve los usuarios que hayan asistido mas de 1 vez al evento, pero en el mismo día.

La solución se me ocurre que viene que agrupar por evento, por usuario y por fecha, formateando la misma a mes-año unicamente, y verificando que la cantidad que acusa count(*) sea mayor que la cantidad que deseamos.

En MySQL sería algo así:

SELECT fecha, usuario, evento, DATE_FORMAT(fecha,'%m-%Y') as mes, COUNT(*) as numero
FROM tabla
GROUP BY mes, usuario, evento
WHERE COUNT(*) > X

Siendo X la cantidad de veces que se asistió al evento el usuario en el mismo mes

Espero haber ayudado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar