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

Consulta de SQL y campos fecha

Estas en el tema de Consulta de SQL y campos fecha en el foro de SQL Server en Foros del Web. tengo una consulta @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT * FROM EVENTS WHERE event_type = 270 AND eventdate >= DateAdd ( YEAR , DateDiff ...
  #1 (permalink)  
Antiguo 19/12/2013, 18:42
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 18 años, 9 meses
Puntos: 0
Pregunta Consulta de SQL y campos fecha

tengo una consulta
Código SQL:
Ver original
  1. SELECT *
  2. FROM EVENTS
  3. WHERE event_type = 270 AND eventdate >= DateAdd(YEAR,DateDiff(YEAR,0,Getdate())-2,0)

Cita:
Editado: Código de programacion no permitido en foros de BBDD.
me arroja estos resultados.

Código:
event_id	site_id	identity_id	parity	event_type	eventdate	
383325	20	17045	NULL	270	2012-06-05 00:00:00.000	
383327	20	17045	NULL	270	2012-06-05 00:00:00.000	
383329	20	17045	NULL	270	2012-06-06 00:00:00.000	
383338	20	17045	NULL	270	2012-10-26 00:00:00.000	
383339	20	17045	NULL	270	2012-10-26 00:00:00.000	
383341	20	17045	NULL	270	2012-10-27 00:00:00.000	
383343	20	17050	NULL	270	2012-04-29 00:00:00.000	
383345	20	17050	NULL	270	2012-04-29 00:00:00.000	
383346	20	17050	NULL	270	2012-04-30 00:00:00.000	
383354	20	17053	NULL	270	2012-05-02 00:00:00.000	
383356	20	17053	NULL	270	2012-05-02 00:00:00.000	
383358	20	17053	NULL	270	2012-05-03 00:00:00.000	
383365	20	17053	NULL	270	2012-09-22 00:00:00.000	
383367	20	17053	NULL	270	2012-09-22 00:00:00.000	
383369	20	17053	NULL	270	2012-09-23 00:00:00.000	
383373	20	17060	NULL	270	2012-05-01 00:00:00.000	
383374	20	17060	NULL	270	2012-05-01 00:00:00.000	
383376	20	17060	NULL	270	2012-05-02 00:00:00.000	
383382	20	17060	NULL	270	2012-09-23 00:00:00.000	
383384	20	17060	NULL	270	2012-09-23 00:00:00.000	
383385	20	17060	NULL	270	2012-09-24 00:00:00.000	
383387	20	17060	NULL	270	2012-10-13 00:00:00.000	
383388	20	17060	NULL	270	2012-10-13 00:00:00.000	
383390	20	17060	NULL	270	2012-10-14 00:00:00.000	
383394	20	17066	NULL	270	2012-05-10 00:00:00.000	
383396	20	17066	NULL	270	2012-05-10 00:00:00.000	
383397	20	17066	NULL	270	2012-05-11 00:00:00.000	
383404	20	17066	NULL	270	2012-10-02 00:00:00.000	
383405	20	17066	NULL	270	2012-10-02 00:00:00.000	
383407	20	17066	NULL	270	2012-10-03 00:00:00.000
hasta aqui todo bien. mi duda es esta. como podran ver este evento se conoce como monta. por eso el campo identity_id se repite constantemente, pues bien lo que me gustaría obtener es el grupo de montas como se hace eso? pues se considiera grupo de montas a lo que seria un servicio

por ejemplo las primeras filas de la consulta

Código:
383325	20	17045	NULL	270	2012-06-05 00:00:00.000	
383327	20	17045	NULL	270	2012-06-05 00:00:00.000	
383329	20	17045	NULL	270	2012-06-06 00:00:00.000	
383338	20	17045	NULL	270	2012-10-26 00:00:00.000	
383339	20	17045	NULL	270	2012-10-26 00:00:00.000	
383341	20	17045	NULL	270	2012-10-27 00:00:00.000
se considera un servicio a aquel evento que pasa 6 dias despues del primero por ejemplo el identity_id 17045 ocurrio por primera vez el 2012-06-05 por segunda vez el mismo dia y tercera vez el 2012-0606 como ocurrio en los primeros 6 dias es considerado un servicio.
y el segundo servicio(grupo de montas) ocurrio en las fechas 2012- 10 -26 al 2012-10-27.

como podria expresar eso con la consulta que ya tengo soy primerizo y no see como armar esa consulta espero puedan ayudarme de antemano muchas gracias.

Última edición por gnzsoloyo; 19/12/2013 a las 18:56
  #2 (permalink)  
Antiguo 19/12/2013, 19:02
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 de SQL y campos fecha

explicate mejor, no se te entiende que es lo que quieres........porque asi lo que entiendo es que quieres agrupar los que tienen el mismo id y 6 dias de diferencia(otra cosa no expliques tu logica con terminos que tu entiendes montas y demas) es mas facil que pongas tengo esto y quiero algo como esto....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 19/12/2013, 19:26
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Consulta de SQL y campos fecha

Cita:
Iniciado por Libras Ver Mensaje
explicate mejor, no se te entiende que es lo que quieres........porque asi lo que entiendo es que quieres agrupar los que tienen el mismo id y 6 dias de diferencia(otra cosa no expliques tu logica con terminos que tu entiendes montas y demas) es mas facil que pongas tengo esto y quiero algo como esto....
gracias por tu respuesta.. en efecto es asi como lo explicas.. agrupar el identity_id dentro de los primeros 6 dias. siento haberme explayado con tanta explicacion esta tabla pertenece a una granja y el evento 270 se conoce como montas, que es cuando inseminan artificialmente a las hembras de la granja. y un servicio es aquel grupo de montas entonces se considera servicio al grupo de montas que ocurren en los primeros 6 dias.

y en efecto es agrupar los eventos del identity_id que ocurran en los primeros 6 dias.

gracias de antemano.
  #4 (permalink)  
Antiguo 20/12/2013, 10:35
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 18 años, 9 meses
Puntos: 0
Pregunta Respuesta: Consulta de SQL y campos fecha

intente con esto,

Código SQL:
Ver original
  1. SELECT *
  2. FROM EVENTS WHERE event_type = 270 AND
  3.         eventdate >= DateAdd(YEAR,DateDiff(YEAR,0,Getdate())-1,0)
  4. GROUP BY  identity_id,DATEADD(DAY,6,eventdate)

pero me sale este error
Cita:
Column 'BH_EVENTS.event_id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Última edición por gnzsoloyo; 20/12/2013 a las 10:38 Razón: :P Mal etiquetado.
  #5 (permalink)  
Antiguo 20/12/2013, 10:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta de SQL y campos fecha

No puedes agrupar de esa forma en SQL Server. Eso sólo funciona en MySQL.
En SQL Server debes indicar todas las columnas que no estén afectadas por una función agregada (MAX, MIN, AVG, COUNT, etc.), cosa que no puedes hacer si usas asterisco (*).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 20/12/2013, 11:02
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Consulta de SQL y campos fecha

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No puedes agrupar de esa forma en SQL Server. Eso sólo funciona en MySQL.
En SQL Server debes indicar todas las columnas que no estén afectadas por una función agregada (MAX, MIN, AVG, COUNT, etc.), cosa que no puedes hacer si usas asterisco (*).

gracias por tu respuesta.. alguna idea de como quedaría esto? ya me hice bolas...
  #7 (permalink)  
Antiguo 20/12/2013, 11:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta de SQL y campos fecha

Me parece que tu problema es que estás confundiendo ordenar con agrupar.
En BBDD son cosas diferentes.
Un GROUP BY es una operación donde se trata de obtener subtotales en base a un conjunto de datos que tomados en grupo, se diferencian entre un registro y otro.

datos como:
Cita:
1, 33, 34, 6, 7, 9
1, 32, 34, 6, 7, 9
tomados como grupo son registros distintos, por más que sólo se diferencien en un único valor, cuando aplicas el GROUP BY.

Lo que no puedes hacer es agrupar sin especificar qué agrupas, es decir, cuáles campos se diferenciarán y cuales no. Es una restricción obligatoria en SQL Server, PostgreSQL, Oracle, DB2 y otros DBMS (no en MySQL).

Si lo que quieres es obtener los registros correspondientes a los 6 últimos días (los 6 primeros son otra cosa), la consulta que haces, sin el GROUP BY te lo devolvería.
Podríamos intentarlo así:
Código SQL:
Ver original
  1. SELECT site_id, identity_id, parity, event_type, eventdate
  2. FROM events
  3. WHERE
  4.     event_type = 270
  5.     AND eventdate BETWEEN  DATEADD(DAY, -6, Getdate()) AND GetDate()
  6. ORDER BY eventdate, site_id, identity_id, parity, event_type

O bien lo hacemos agrupando:
Código SQL:
Ver original
  1. SELECT site_id, identity_id, parity, event_type, MAX(eventdate) eventdate
  2. FROM events
  3. WHERE
  4.     event_type = 270
  5.     AND eventdate BETWEEN  DATEADD(DAY, -6, Getdate()) AND GetDate()
  6. GROUP BY site_id, identity_id, parity, event_type


Como sea, lo primero que debes definir es qué información quieres obtener. Eso es lo que no está muy claro. Y por "qué información", estamos hablando de qué nivel de consolidación (sumas, promedios, maximos, mínimos), y sobre qué campos necesitas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 20/12/2013, 12:15
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Consulta de SQL y campos fecha

Cita:
Iniciado por bendark23 Ver Mensaje
tengo una consulta
Código SQL:
Ver original
  1. SELECT *
  2. FROM EVENTS
  3. WHERE event_type = 270 AND eventdate >= DateAdd(YEAR,DateDiff(YEAR,0,Getdate())-2,0)



me arroja estos resultados.

Código:
event_id	site_id	identity_id	parity	event_type	eventdate	
383325	20	17045	NULL	270	2012-06-05 00:00:00.000	
383327	20	17045	NULL	270	2012-06-05 00:00:00.000	
383329	20	17045	NULL	270	2012-06-06 00:00:00.000	
383338	20	17045	NULL	270	2012-10-26 00:00:00.000	
383339	20	17045	NULL	270	2012-10-26 00:00:00.000	
383341	20	17045	NULL	270	2012-10-27 00:00:00.000	
383343	20	17050	NULL	270	2012-04-29 00:00:00.000	
383345	20	17050	NULL	270	2012-04-29 00:00:00.000	
383346	20	17050	NULL	270	2012-04-30 00:00:00.000	
383354	20	17053	NULL	270	2012-05-02 00:00:00.000	
383356	20	17053	NULL	270	2012-05-02 00:00:00.000	
383358	20	17053	NULL	270	2012-05-03 00:00:00.000	
383365	20	17053	NULL	270	2012-09-22 00:00:00.000	
383367	20	17053	NULL	270	2012-09-22 00:00:00.000	
383369	20	17053	NULL	270	2012-09-23 00:00:00.000	
383373	20	17060	NULL	270	2012-05-01 00:00:00.000	
383374	20	17060	NULL	270	2012-05-01 00:00:00.000	
383376	20	17060	NULL	270	2012-05-02 00:00:00.000	
383382	20	17060	NULL	270	2012-09-23 00:00:00.000	
383384	20	17060	NULL	270	2012-09-23 00:00:00.000	
383385	20	17060	NULL	270	2012-09-24 00:00:00.000	
383387	20	17060	NULL	270	2012-10-13 00:00:00.000	
383388	20	17060	NULL	270	2012-10-13 00:00:00.000	
383390	20	17060	NULL	270	2012-10-14 00:00:00.000	
383394	20	17066	NULL	270	2012-05-10 00:00:00.000	
383396	20	17066	NULL	270	2012-05-10 00:00:00.000	
383397	20	17066	NULL	270	2012-05-11 00:00:00.000	
383404	20	17066	NULL	270	2012-10-02 00:00:00.000	
383405	20	17066	NULL	270	2012-10-02 00:00:00.000	
383407	20	17066	NULL	270	2012-10-03 00:00:00.000
hasta aqui todo bien. mi duda es esta. como podran ver este evento se conoce como monta. por eso el campo identity_id se repite constantemente, pues bien lo que me gustaría obtener es el grupo de montas como se hace eso? pues se considiera grupo de montas a lo que seria un servicio

por ejemplo las primeras filas de la consulta

Código:
383325	20	17045	NULL	270	2012-06-05 00:00:00.000	
383327	20	17045	NULL	270	2012-06-05 00:00:00.000	
383329	20	17045	NULL	270	2012-06-06 00:00:00.000	
383338	20	17045	NULL	270	2012-10-26 00:00:00.000	
383339	20	17045	NULL	270	2012-10-26 00:00:00.000	
383341	20	17045	NULL	270	2012-10-27 00:00:00.000
se considera un servicio a aquel evento que pasa 6 dias despues del primero por ejemplo el identity_id 17045 ocurrio por primera vez el 2012-06-05 por segunda vez el mismo dia y tercera vez el 2012-0606 como ocurrio en los primeros 6 dias es considerado un servicio.
y el segundo servicio(grupo de montas) ocurrio en las fechas 2012- 10 -26 al 2012-10-27.

como podria expresar eso con la consulta que ya tengo soy primerizo y no see como armar esa consulta espero puedan ayudarme de antemano muchas gracias.


gracias por tu respuesta pero no es lo que busco, con esa consulta me arroja los resultados de los 6 dias en cuestion. quizas me explique mal..

con la primera consulta obtengo los datos que se muestran en la primerta tabla, bien el evento 270 del identity_id se repite contantemente como se puede ver se condiera una monta (inseminacion cada vez) hasta ahi todo bien. lo que ocupo es sacar el numero se servicios que han ocurrido en una fecha determinada. se condiera un servicio a un grupo de montas. por ejemplo

si el identity_id 17555 tuvo las siguientes montas
2013-12- 15
2013-12-14
2013-12-12
2013-12-01
2013-11-30
2013-11-29


se considera un serivcio al grupo de montas que tivieron lugar los primeros 6 días a partir del primer evento (2013-11-29) según el ejemplo, esta hembra tuvo 2 servicios

1- primera monta 2013-11-29
segunda monta 2013-11-30
tercera monta 2013-12-01

13 dias despues..

2 - primera monta 2013-12-12
segunda monta 2013-12-14
tercera monta 2013-12- 15


eso es lo que intento saber... pero ya me hice bolas.
  #9 (permalink)  
Antiguo 20/12/2013, 12:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta de SQL y campos fecha

Cita:
eso es lo que intento saber... pero ya me hice bolas.
...Es que no es una consulta sencilla de SELECT * FROM... WHERE... lo que necesitas para responder esto.

Espera un poco a que alguno de los más expertos de SQL Server te conteste, porque necesita algo más de práctica en SQL Server de la que yo tengo (si fuera Oracle o MySQL sería distinto :D).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 20/12/2013, 12:32
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Consulta de SQL y campos fecha

explicame para mysql.

lo que intento es que tome en cuenta el primer evento del indentity_id , y descarte los siguientes que ocurran dentro de los 6 días siguientes para que esto sea un servicio.

explicamelo para mysql por favor.. te lo agradeceria muchisimo.
  #11 (permalink)  
Antiguo 20/12/2013, 12:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta de SQL y campos fecha

Cita:
explicame para mysql.
La solución en MySQL es inaplicable para SQL Server u Oracle.
Ciertas capacidades que cada DBMS le pone a su versión de SQL hacen que no se puedan migrar de uno a otro las soluciones.
Al menos no todas.

Por caso, en MySQL tu primera consulta con uso de GROUP BY hubiese funcionado, pero si lo intentas en SQL Server, dispara un error insalvable.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 20/12/2013, 12:57
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Consulta de SQL y campos fecha

la primera consulta la uso para extraer información de SQL Server para no trabajar directamente en una BD de un sistema PRO. con esa informacion lleno una tabla en mysql. de ahí mi interés...

si la pedía en sql era para extraer de una sola vez la información ya lista.
  #13 (permalink)  
Antiguo 20/12/2013, 13:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta de SQL y campos fecha

Cita:
Iniciado por bendark23 Ver Mensaje
la primera consulta la uso para extraer información de SQL Server para no trabajar directamente en una BD de un sistema PRO. con esa informacion lleno una tabla en mysql. de ahí mi interés...

si la pedía en sql era para extraer de una sola vez la información ya lista.
Explicame algo: ¿Trabajas con SQL Server o con MySQL?
¿O la fuente de datos es SQL Server, y la base destino es MySQL?

Eso es información MUY importante, porque no es lo mismo hacerlo entre esas dos, que hacerlo todo con una sola...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 20/12/2013, 13:07
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Consulta de SQL y campos fecha

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Explicame algo: ¿Trabajas con SQL Server o con MySQL?
¿O la fuente de datos es SQL Server, y la base destino es MySQL?

Eso es información MUY importante, porque no es lo mismo hacerlo entre esas dos, que hacerlo todo con una sola...
la primera consulta del post es desde php que extrae resultados de una tabala de sql server. los resultados que arroja los guarde en una tabla de mysql. ahora lo que intento es depurar esos datos como ya lo mencione antes. haciendo que me tome en cuenta el primer evento del identity_id... y si ocurren mas dentro de los 6 dias posteriores al primer evento los descarte.. si ocurre uno al 7 dia es tomando en cuenta como un servicio mas.
  #15 (permalink)  
Antiguo 20/12/2013, 13:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta de SQL y campos fecha

Trata de atenerte a lo que te pregunto. No te explayes sobre lo que ya dijiste, porque eso ya lo entendí.

Te repito: No te servirá de nada que te diga cómo obtener los datos en MySQL, porque no podrás usar la misma sintaxis en SQL Server, que es de donde debes sacarlos.
No mezcles las cosas.

La query:
Código MySQL:
Ver original
  1. FROM EVENTS
  2. WHERE event_type = 270 AND eventdate >= date_sub(CURDATE(), INTERVAL 6 DAY)
  3. GROUP BY  identity_id, DATE(eventdate)
Funcionaría en MySQL, pero no funciona en SQL Server, porque éste no reconocerá la sintaxis, ni tampoco el agrupamiento que indica.

¿Te queda claro eso?

MySQL admite agrupar por columnas no indicadas en el SELECT, por parte de las columnas, e incluso por columnas virtuales. Pero nada de eso es admitido por SQL Server. No son iguales.

Ten paciencia y veremos si uno de los expertos en SQL Server puede darte mejores soluciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 23/12/2013, 10:52
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 de SQL y campos fecha

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. eventid INT,
  4. site_id INT,
  5. identity_id INT,
  6. parity INT,
  7. event_type INT,
  8. eventdate datetime
  9. )
  10.  
  11. INSERT INTO #temp VALUES (383325,   20  ,17045, NULL    ,270,'2012-06-05 00:00:00.000')
  12. INSERT INTO #temp VALUES (383327,   20  ,17045, NULL    ,270,'2012-06-05 00:00:00.000')
  13. INSERT INTO #temp VALUES (383329,   20  ,17045, NULL    ,270,'2012-06-06 00:00:00.000')
  14. INSERT INTO #temp VALUES (383338,   20  ,17045, NULL    ,270,'2012-10-26 00:00:00.000')
  15. INSERT INTO #temp VALUES (383339,   20  ,17045, NULL    ,270,'2012-10-26 00:00:00.000')
  16. INSERT INTO #temp VALUES (383341,   20  ,17045, NULL    ,270,'2012-10-27 00:00:00.000')
  17. INSERT INTO #temp VALUES (383343,   20  ,17050, NULL    ,270,'2012-04-29 00:00:00.000')
  18. INSERT INTO #temp VALUES (383345,   20  ,17050, NULL    ,270,'2012-04-29 00:00:00.000')
  19. INSERT INTO #temp VALUES (383346,   20  ,17050,NULL ,270,'2012-04-30 00:00:00.000')
  20. INSERT INTO #temp VALUES (383354,   20  ,17053, NULL    ,270,'2012-05-02 00:00:00.000')
  21. INSERT INTO #temp VALUES (383356,   20  ,17053, NULL    ,270,'2012-05-02 00:00:00.000')
  22. INSERT INTO #temp VALUES (383358,   20  ,17053, NULL    ,270,'2012-05-03 00:00:00.000')
  23. INSERT INTO #temp VALUES (383365,   20  ,17053, NULL    ,270,'2012-09-22 00:00:00.000')
  24. INSERT INTO #temp VALUES (383367,   20  ,17053, NULL    ,270,'2012-09-22 00:00:00.000')
  25. INSERT INTO #temp VALUES (383369,   20  ,17053, NULL    ,270,'2012-09-23 00:00:00.000')
  26. INSERT INTO #temp VALUES (383373,   20  ,17060, NULL    ,270,'2012-05-01 00:00:00.000')
  27. INSERT INTO #temp VALUES (383374,   20  ,17060, NULL    ,270,'2012-05-01 00:00:00.000')
  28. INSERT INTO #temp VALUES (383376,   20  ,17060, NULL    ,270,'2012-05-02 00:00:00.000')
  29. INSERT INTO #temp VALUES (383382,   20  ,17060, NULL    ,270,'2012-09-23 00:00:00.000')
  30. INSERT INTO #temp VALUES (383384,   20  ,17060, NULL    ,270,'2012-09-23 00:00:00.000')
  31. INSERT INTO #temp VALUES (383385,   20  ,17060, NULL    ,270,'2012-09-24 00:00:00.000')
  32. INSERT INTO #temp VALUES (383387,   20  ,17060, NULL    ,270,'2012-10-13 00:00:00.000')
  33. INSERT INTO #temp VALUES (383388,   20  ,17060, NULL    ,270,'2012-10-13 00:00:00.000')
  34. INSERT INTO #temp VALUES (383390,   20  ,17060, NULL    ,270,'2012-10-14 00:00:00.000')
  35. INSERT INTO #temp VALUES (383394,   20  ,17066, NULL    ,270,'2012-05-10 00:00:00.000')
  36. INSERT INTO #temp VALUES (383396,   20  ,17066, NULL    ,270,'2012-05-10 00:00:00.000')
  37. INSERT INTO #temp VALUES (383397,   20  ,17066, NULL    ,270,'2012-05-11 00:00:00.000')
  38. INSERT INTO #temp VALUES (383404,   20, 17066,  NULL    ,270,'2012-10-02 00:00:00.000')
  39. INSERT INTO #temp VALUES (383405,   20, 17066,  NULL    ,270,'2012-10-02 00:00:00.000')
  40.  
  41.  
  42. CREATE TABLE #resultado
  43. (
  44. comentario VARCHAR(20),
  45. identity_id INT,
  46. fecha datetime
  47. )
  48.  
  49. SELECT DISTINCT identity_id,IDENTITY(INT,1,1) AS rn INTO #temp2 FROM #temp
  50. DECLARE @x INT
  51. DECLARE @y INT
  52. DECLARE @minimo datetime
  53. DECLARE @IDENTITY INT
  54. DECLARE @dias INT
  55. DECLARE @contador INT
  56. DECLARE @contador1 INT
  57. SET @x=1
  58. SET @contador=1
  59. while @x<=(SELECT COUNT(*) FROM #temp2)
  60. BEGIN
  61. SELECT @IDENTITY=identity_id FROM #temp2 WHERE rn=@x
  62. SELECT *,IDENTITY(INT,1,1) AS rn INTO #temp3 FROM #temp WHERE identity_id=@IDENTITY
  63.     SET @y=1
  64.     SET @contador=1
  65.     SET @contador1=1
  66.     SELECT @minimo=MIN(eventdate) FROM #temp3
  67.     INSERT INTO #resultado
  68.     SELECT CONVERT(VARCHAR(20),@contador) + ' Evento', identity_id,NULL FROM #temp2 WHERE rn=@x    
  69.     while @y<=(SELECT COUNT(*) FROM #temp3)
  70.     BEGIN
  71.      SELECT @dias=datediff(dd,@minimo,eventdate) FROM #temp3 WHERE rn=@y
  72.      IF @dias>6
  73.        BEGIN   
  74.          SET @contador=@contador+1
  75.          SET @contador1=1
  76.          INSERT INTO #resultado
  77.          SELECT CONVERT(VARCHAR(20),@contador) + ' Evento', identity_id,NULL FROM #temp3 WHERE rn=@y
  78.          SELECT @minimo=MIN(eventdate) FROM #temp3 WHERE rn=@y
  79.          INSERT INTO #resultado
  80.          SELECT CONVERT(VARCHAR(20),@contador1) + ' monta', identity_id,eventdate FROM #temp3 WHERE rn=@y  
  81.          SET @contador1=@contador1+1
  82.        END
  83.      ELSE
  84.         BEGIN
  85.           INSERT INTO #resultado
  86.           SELECT CONVERT(VARCHAR(20),@contador1) + ' monta', identity_id,eventdate FROM #temp3 WHERE rn=@y  
  87.           SET @contador1=@contador1+1
  88.         END
  89.      SET @y=@y+1
  90.     END
  91. DROP TABLE #temp3
  92. SET @x=@x+1
  93. END
  94.  
  95. SELECT * FROM #resultado
  96.  
  97. DROP TABLE #temp2
  98. DELETE FROM #resultado

el resutado es:

comentario identity_id fecha
-------------------- ----------- -----------------------
1 Evento 17045 NULL
1 monta 17045 2012-06-05 00:00:00.000
2 monta 17045 2012-06-05 00:00:00.000
3 monta 17045 2012-06-06 00:00:00.000
2 Evento 17045 NULL
1 monta 17045 2012-10-26 00:00:00.000
2 monta 17045 2012-10-26 00:00:00.000
3 monta 17045 2012-10-27 00:00:00.000
1 Evento 17050 NULL
1 monta 17050 2012-04-29 00:00:00.000
2 monta 17050 2012-04-29 00:00:00.000
3 monta 17050 2012-04-30 00:00:00.000
1 Evento 17053 NULL
1 monta 17053 2012-05-02 00:00:00.000
2 monta 17053 2012-05-02 00:00:00.000
3 monta 17053 2012-05-03 00:00:00.000
2 Evento 17053 NULL
1 monta 17053 2012-09-22 00:00:00.000
2 monta 17053 2012-09-22 00:00:00.000
3 monta 17053 2012-09-23 00:00:00.000
1 Evento 17060 NULL
1 monta 17060 2012-05-01 00:00:00.000
2 monta 17060 2012-05-01 00:00:00.000
3 monta 17060 2012-05-02 00:00:00.000
2 Evento 17060 NULL
1 monta 17060 2012-09-23 00:00:00.000
2 monta 17060 2012-09-23 00:00:00.000
3 monta 17060 2012-09-24 00:00:00.000
3 Evento 17060 NULL
1 monta 17060 2012-10-13 00:00:00.000
2 monta 17060 2012-10-13 00:00:00.000
3 monta 17060 2012-10-14 00:00:00.000
1 Evento 17066 NULL
1 monta 17066 2012-05-10 00:00:00.000
2 monta 17066 2012-05-10 00:00:00.000
3 monta 17066 2012-05-11 00:00:00.000
2 Evento 17066 NULL
1 monta 17066 2012-10-02 00:00:00.000
2 monta 17066 2012-10-02 00:00:00.000


saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

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 20:12.