SQL - query numero de visitas

 
Vista:

query numero de visitas

Publicado por Cooler O'Connor (5 intervenciones) el 02/04/2012 20:41:23
Hola estoy atorado con un query, ya le he dado vueltas y no encuentro la solucion, necesito obtener el numero de veces que un socio ingreso al sistema, la informacion que tengo es la siguiente

CardID DateAction Action MemberType
2011050800002 8/6/2011 1 C
2011050800002 8/6/2011 1 C
2011050800002 8/6/2011 1 M
2011050800002 8/6/2011 1 C
2011050800002 8/6/2011 1 C
2011050800002 8/6/2011 1 C
2011050800002 8/6/2011 1 C
2011050800002 8/6/2011 1 C
2011050800002 8/6/2011 1 C
2011050800002 8/6/2011 1 C
2011050800002 8/7/2011 1 C
2011050800002 8/7/2011 1 C
2011050800002 8/7/2011 1 C
2011050800002 8/7/2011 1 M
2011050800002 8/7/2011 1 C
2011050800002 8/7/2011 1 C

el query db de agrupar la informacion por fecha de la sig forma

CardID DateAction Visitas MemberType
2011050800002 8/6/2011 1 C
2011050800002 8/6/2011 1 M
2011050800002 8/7/2011 1 C
2011050800002 8/7/2011 1 M

el query q realice es el siguiente pero no agrupa correctamente

select DISTINCT(CardID) as CREDENCIAL, count(CardID) as VISITAS,MemberType AS TIPOMEMBRESIA
from BitacoraMembresias where Action = 1 and DateAction between '2011-08-01' and '2011-08-30'
group by CardID,MemberType,DateAction
order by CardID

Espero me puedan ayudar

Saludos
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
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

query numero de visitas

Publicado por leonardo_josue (1173 intervenciones) el 02/04/2012 21:26:00
Hola Cooler O'Connor:

No mencionas con qué BD estás trabajando. Esto es importante pues aunque todos trabajan con SQL, la sintaxis presenta diferencias a veces importantes entre cada uno de ellos. En MySQL sería más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
mysql> SELECT * FROM BitacoraMembresias ;
+---------------+------------+--------+------------+
| CardID        | DateAction | Action | MemberType |
+---------------+------------+--------+------------+
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | M          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | M          |
| 2011050800002 | 2011-08-07 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | C          |
+---------------+------------+--------+------------+
16 rows in set (0.00 sec)
 
mysql> SELECT CardID CREDENCIAL, DateAction, COUNT(CardID) AS VISITAS,
    -> MemberType  TIPOMEMBRESIA
    -> FROM BitacoraMembresias
    -> WHERE ACTION = 1 AND DateAction BETWEEN '2011-08-01' AND '2011-08-30'
    -> GROUP BY CardID,MemberType,DateAction
    -> ORDER BY CardID;
+---------------+------------+---------+---------------+
| CREDENCIAL    | DateAction | VISITAS | TIPOMEMBRESIA |
+---------------+------------+---------+---------------+
| 2011050800002 | 2011-08-06 |       9 | C             |
| 2011050800002 | 2011-08-07 |       5 | C             |
| 2011050800002 | 2011-08-06 |       1 | M             |
| 2011050800002 | 2011-08-07 |       1 | M             |
+---------------+------------+---------+---------------+
4 rows in set (0.00 sec)


Haz la prueba y nos comentas.

Saludos
Leo.
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 numero de visitas

Publicado por Cooler O'Connor (5 intervenciones) el 03/04/2012 00:57:10
Hola Leo

Gracias por tu query, ya he intentado algo similar, pero lo que yo quiero es, por ejm, en el primer registro, en lugar de que se contabilicen 9 registros para ese dia, solo se contabilice como una sola visita (), algo como esto:

+---------------+------------+---------+---------------+------------------------+
| CREDENCIAL | DateAction | VISITAS | TIPOMEMBRESIA |
+---------------+------------+---------+---------------+-------------------------+
| 2011050800002 | 2011-08-06 | 1 | C |
| 2011050800002 | 2011-08-07 | 1 | C |
| 2011050800002 | 2011-08-06 | 1 | M |
| 2011050800002 | 2011-08-07 | 1 | M |
+---------------+------------+---------+---------------+


Crees q se pueda pq lo mas cercano q he hecho es algo parecido a lo tuyo y agrupando fechas
este es mi nuevo query:


select DISTINCT(CardID) AS SOCIO,convert(varchar(10),DateAction,103) as FECHA, MemberType AS MEMBRESIA from BitacoraMembresias
where Action=1 and DateAction between '2011-08-01' and '2011-08-30'
group by convert(varchar(10),DateAction,103),CardID,MemberType
order by CardID


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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

query numero de visitas

Publicado por leonardo_josue (1173 intervenciones) el 03/04/2012 23:25:44
Hola de nuevo:

puedes hacerlo poniendo solo el DISTINCT, pero sin necesidad de agrupar... En estos momentos no tengo instalado SQL Server en mi equipo, pero debería funcionar así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
mysql> SELECT * FROM tabla;
+---------------+------------+--------+------------+
| CardID        | DateAction | Action | MemberType |
+---------------+------------+--------+------------+
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | M          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | M          |
| 2011050800002 | 2011-08-07 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | C          |
+---------------+------------+--------+------------+
16 rows in set (0.00 sec)
 
mysql> SELECT DISTINCT CardID, dateAction, ACTION, membertype FROM tabla;
+---------------+------------+--------+------------+
| CardID        | dateAction | ACTION | membertype |
+---------------+------------+--------+------------+
| 2011050800002 | 2011-08-06 |      1 | C          |
| 2011050800002 | 2011-08-06 |      1 | M          |
| 2011050800002 | 2011-08-07 |      1 | C          |
| 2011050800002 | 2011-08-07 |      1 | M          |
+---------------+------------+--------+------------+
4 rows in set (0.10 sec)


Haz la prueba y nos comentas.

Saludos
Leo.
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