Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Consulta con diferentes periodos de tiempo, en uno

Estas en el tema de Consulta con diferentes periodos de tiempo, en uno en el foro de SQL Server en Foros del Web. Buenas tardes, Queridos amigos de Foros del Web, solicito su ayuda con un tema que me tiene con la cabeza ardiendo y es el siguiente: ...
  #1 (permalink)  
Antiguo 20/09/2013, 15:21
 
Fecha de Ingreso: mayo-2011
Mensajes: 47
Antigüedad: 12 años, 10 meses
Puntos: 1
Pregunta Consulta con diferentes periodos de tiempo, en uno

Buenas tardes,


Queridos amigos de Foros del Web, solicito su ayuda con un tema que me tiene con la cabeza ardiendo y es el siguiente:

Necesito realizar una consulta a una tabla y que esta me genere los acumulados del dia, mes y año lo ideal seria con una sola consulta , en este momento lo estoy haciendo con tres consultas independientes, pero los datos pueden variar dia a dia por tanto, los datos pueden cambiar.

Tabla 1
Código SQL:
Ver original
  1. index__ciudad___turistas____fecha
  2. 1_____ciudad1___10_____10-03-2013
  3. 1_____ciudad1___12_____10-03-2013
  4. 2_____ciudad2___11_____10-03-2013
  5. 4_____ciudad3___09_____10-03-2013
  6.  
  7. 5_____ciudad1___01_____10-03-2013
  8. 6_____ciudad2___08_____11-03-2013
  9. 7_____ciudad4___15_____11-03-2013
  10.  
  11. 8_____ciudad1___11_____12-03-2013
  12. 9_____ciudad2___02_____12-03-2013
  13. 10____ciudad3___17_____12-03-2013
  14. 11____ciudad5___10_____12-03-2013

En el momento hago la consulta por dia por mes y año

mas o menos asi:

Código SQL:
Ver original
  1. SELECT DISTINCT(ciudad), SUM(turistas) AS conteoTuristas WHERE fecha=10-03-2013
Código SQL:
Ver original
  1. SELECT DISTINCT(ciudad), SUM(turistas) AS conteoTuristas WHERE DATEPART(mm,fecha)='03'
Código SQL:
Ver original
  1. SELECT DISTINCT(ciudad), SUM(turistas) AS conteoTuristas WHERE DATEPART(yy,fecha)='2013'

los resultados de la consulta 1 seria:

ciudad1___22
ciudad2___11
ciudad3___09

los resultados de la consulta 2 seria:

ciudad1___23
ciudad2___19
ciudad3___09
ciudad4___15

los resultados de la consulta 2 seria:

ciudad1___34
ciudad2___21
ciudad3___26
ciudad4___15
ciudad5___10

la idea es combinar las tres consultas y que el resultado sea mas o menos este:
ciudad____ano___mes____dia
ciudad1___34____23_____22
ciudad2___21____19_____11
ciudad3___26____09_____09
ciudad4___15____15_______
ciudad5___10_____________



agradezco cualquier ayuda que e puedan brindar en este tema
  #2 (permalink)  
Antiguo 20/09/2013, 16:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta con diferentes periodos de tiempo, en uno

Código SQL:
Ver original
  1. CREATE TABLE #temp(
  2. ciudad VARCHAR(20),
  3. turistas INT,
  4. fecha datetime
  5. )
  6.  
  7. INSERT INTO #temp VALUES ('ciudad1',10,'03-10-2013')
  8. INSERT INTO #temp VALUES ('ciudad1',12,'03-10-2013')
  9. INSERT INTO #temp VALUES ('ciudad2',11,'03-10-2013')
  10. INSERT INTO #temp VALUES ('ciudad3',09,'03-10-2013')
  11.  
  12. INSERT INTO #temp VALUES ('ciudad1',01,'03-10-2013')
  13. INSERT INTO #temp VALUES ('ciudad2',08,'03-11-2013')
  14. INSERT INTO #temp VALUES ('ciudad4',15,'03-11-2013')
  15.  
  16. INSERT INTO #temp VALUES ('ciudad1',11,'03-12-2013')
  17. INSERT INTO #temp VALUES ('ciudad2',02,'03-12-2013')
  18. INSERT INTO #temp VALUES ('ciudad3',17,'03-12-2013')
  19. INSERT INTO #temp VALUES ('ciudad5',10,'03-12-2013')
  20.  
  21. --delete from #temp
  22.  
  23. --select datepart(mm,fecha) from #temp
  24. SELECT t1.ciudad,t1.conteoTuristas AS año,t2.conteoturistas AS mes,t3.conteoTuristas AS dia
  25. FROM
  26. (SELECT DISTINCT(ciudad), SUM(turistas) AS conteoTuristas FROM #temp WHERE DATEPART(yy,fecha)=2013 GROUP BY ciudad)t1
  27. LEFT JOIN (SELECT DISTINCT(ciudad), SUM(turistas) AS conteoTuristas FROM #temp WHERE DATEPART(mm,fecha)=3 GROUP BY ciudad) AS t2 ON (t1.ciudad=t2.ciudad)
  28. LEFT JOIN(SELECT DISTINCT(ciudad), SUM(turistas) AS conteoTuristas FROM #temp WHERE fecha='03-10-2013' GROUP BY ciudad) t3 ON (t2.ciudad=t3.ciudad)

Con esto obtienes lo siguiente:

ciudad año mes dia
-------------------- ----------- ----------- -----------
ciudad1 34 34 23
ciudad2 21 21 11
ciudad3 26 26 9
ciudad4 15 15 NULL
ciudad5 10 10 NULL


saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 20/09/2013, 20:49
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Consulta con diferentes periodos de tiempo, en uno

Siguiendo la tabla de Libras, yo lo haria asi:
Código SQL:
Ver original
  1. DECLARE @Fecha DateTime='20130310';
  2. SELECT  Ciudad,
  3.         SUM(CASE WHEN DateDiff(YEAR,Fecha,@Fecha)=0 THEN Turistas END) Ano,
  4.         SUM(CASE WHEN DateDiff(MONTH,Fecha,@Fecha)=0 THEN Turistas END) Mes,
  5.         SUM(CASE WHEN Fecha=@Fecha THEN Turistas END) Dia
  6. FROM    #temp
  7. GROUP BY Ciudad;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 23/09/2013, 09:46
 
Fecha de Ingreso: mayo-2011
Mensajes: 47
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Consulta con diferentes periodos de tiempo, en uno

Muchas gracias por sus respuestas me fueron de mucha ayuda

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:09.