SQL Server - AYUDA CONSULTA SQL

 
Vista:
sin imagen de perfil

AYUDA CONSULTA SQL

Publicado por JUAN DE SEBASTIAN (5 intervenciones) el 12/07/2016 23:07:26
HOLA AMIGOS QUE HACEN PARTE DE LWP, NO SOY MUY EXPERTO EN SQL Y REQUIERO DE SU AYUDA,
LES EXPLICARE ESTA TABLA CONTIENE LOS FLUJOS DE UNAS ESTRATEGIAS Y
NECESITO HACER UNA CONSULTA EN SQL SERVER 2008 QUE ME ARROJE LOS REGISTRO DE LAS ESTRATEGIAS QUE CUMPLAN CON LA CONDICION DE IR (DE_ID=2) A (PARA_ID=3) ADEMAS QUE EL ULTIMO REGISTRO DE CADA IDESTREGIA SEA DIFERENTE DE ('100%')...
ALGO MASOMENOS ASI

SELECT * FROM CP_FLUJO WHERE DE_ID=2 AND PARA_ID=3 AND MAX(PARA_ID) NOT LIKE (''100%')

TENDRIA QUE ARROJARME LAS IDESTRATEGIAS QUE TENGAN UN FLUJO 2 - 3 Y NO TERMINEN EN 1000x

OSEA LA 36048, 36043, 35958,35784 AUNQUE LAS OTRAS TIENE FLUJO DE 2-3 TERMINAN EN 1000x POR ELLO SE DESCARTAN Y NO SE DEBERIAN MOSTRAR

LES AGRADECERIA SU AYUDA

Id IdEstrategia Usuario DE_ID PARA_ID Fecha
190636 36046 NH\ANGELA.PARRAG 2 3
190635 36046 NH\ANGELA.PARRAG 2 2
190625 36043 NH\CLAUDIA.CRUZ 2 3
190624 36043 NH\CLAUDIA.CRUZ 2 2
190262 35958 NH\DOSORIOLO 3 4
190192 35958 NH\PFQUINTEROCA 2 3
190190 35958 NH\PFQUINTEROCA 2 2
189163 35784 NH\DOSORIOLO 3 4
189105 35784 NH\DIANA.URBANOJ 2 3
189103 35784 NH\DIANA.URBANOJ 2 2
180904 33986 NH\FABEJARANOVI 10005 1
180239 33986 NH\OEROPAINME 3 2
180206 33986 NH\ANGELA.PARRAG 2 3
180190 33986 NH\ANGELA.PARRAG 2 2
180243 33986 NH\ANGELA.PARRAG 2 1
180278 33986 NH\FABEJARANOVI 1 10005
180905 33986 NH\FABEJARANOVI 1 10003
173380 32665 NH\OEROPAINME 3 2
173390 32665 NH\DIANA.URBANOJ 2 1
173334 32665 NH\DIANA.URBANOJ 2 3
173333 32665 NH\DIANA.URBANOJ 2 10002
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

AYUDA CONSULTA SQL

Publicado por Isaias (4558 intervenciones) el 13/07/2016 00:56:22
¿Que motor de base de datos ocupas?

Me queda claro que la primera comparacion deberia ser: (DE_ID=2 OR PARA_ID=3)

¿Pero y porque utilizar MAX(PARA_ID) y no tener un GROUP BY?
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

AYUDA CONSULTA SQL

Publicado por JUAN DE SEBASTIAN (5 intervenciones) el 13/07/2016 15:34:16
hola Isaias.
Mira uso SQL SERVER 2008,,,la consulta es mucho mas extensa y pues no queria complicar la pregunta pero mira aca esta toda la consulta son varias tablas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT A.IdEstrategia AS ESTRATEGIA,
MIN(Cast(A.Usuario as varchar(max))) AS USUARIO_ORIGEN,
MAX(Cast(A.DE_ID_ROL as varchar(max))) AS DE_ID,
MAX(Cast(A.PARA_ID_ROL as varchar(max))) AS PARA_ID,
(SELECT NOM_ROL FROM SW_ROLES_GRUPO WHERE ID_ROL=A.PARA_ID_ROL) AS DESTINO,
MIN(Cast(A.Fecha as varchar(max))) AS LLEGADA_REQUERIMIENTO,
(SELECT Estado FROM CP_Estrategia C WHERE C.Id=A.IdEstrategia) AS ESTADO,
MAX(Cast(D.UsuarioColaborador as varchar(max))) AS USUARIO_COLABORADOR,
MAX(Cast(B.VALOR_FECHA as varchar(max))) AS COMPRIMSO_PA,
(SELECT dbo.FN_WorkTime_HORAS (MIN(Fecha),SYSDATETIME())) AS HORAS,
(SELECT COUNT(*) FROM QA_TIPODIA Q WHERE TIPO_DIA IN(1) AND Q.FECHA BETWEEN A.Fecha AND SYSDATETIME()) AS DIAS,
(SELECT Nombre FROM CP_Estrategia WHERE CP_Estrategia.Id=A.IdEstrategia) AS NOMBRE_DE_LA_ESTRATEGIA
FROM (SELECT * FROM Cp_Flujo WHERE DE_ID_ROL IN (2) AND PARA_ID_ROL IN (3)) as A
LEFT JOIN SW_VALORES_ROLXFLUJO B ON B.ID_ESTRATEGIA=A.IdEstrategia AND ID_CAMPO_ROLXFLUJO=11
JOIN CP_Estrategia C ON C.Id=A.IdEstrategia
JOIN Cp_Colaboradores D ON D.Id_estrategia=A.IdEstrategia
GROUP BY IdEstrategia,Fecha,DE_ID_ROL,PARA_ID_ROL,VALOR_FECHA
ORDER BY CASE WHEN VALOR_FECHA IS NULL THEN 0 ELSE 1 END, 1 DESC;

como te digo me salen los idestrategia que van de 2 a 3 pero como hago para "comparar" de algun modo si termina en ('100%') el ultimo registro de cada id para evitarlo
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: 86
Ha disminuido su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

AYUDA CONSULTA SQL

Publicado por Rafael (110 intervenciones) el 13/07/2016 12:05:15
Juan:

Analiza lo que escribes y veras por que no va a funcionar...
Siendo esto tu condicionante...

WHERE DE_ID=2 AND PARA_ID=3 AND MAX(PARA_ID) NOT LIKE (''100%')

Veamos solo logica pura y dura
si PARA_ID es IGUAL a 3, es IMPOSIBLE que el MAXIMO (SIEMPRE es igual a 3) se parezca a '100%'

Ahora bien dicho esto TAMPOCO puedes usar una funcion de agregacion (MAX, SUM, MIN, ETC) que muestre mas del dato agregado sin tener un AGRUPADOR.

Luego entonces para lo que quieres hacer bastaria con:
1
SELECT * FROM CP_FLUJO WHERE DE_ID=2 AND PARA_ID=3

Asi mostraria solo los flujos de DE_ID IGUALES A 2 y PARA_ID Iguales a 3, ninguno mas.

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

AYUDA CONSULTA SQL

Publicado por JUAN DE SEBASTIAN (5 intervenciones) el 13/07/2016 15:41:19
hola Rafael si entiendo lo que me dices, solo escribi esa sentencia como modo de hacerme entender mejor, la consulta es mas extensa y efectivamente ya tengo los registro que van en el flujo de 2 a 3 pero no se si se pueda tambien saber si ese codigo termina en ('100%')... mira la consulta completa es esta y pues tengo un group by por eso uso funciones de agregacion


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT A.IdEstrategia AS ESTRATEGIA,
MIN(Cast(A.Usuario as varchar(max))) AS USUARIO_ORIGEN,
MAX(Cast(A.DE_ID_ROL as varchar(max))) AS DE_ID,
MAX(Cast(A.PARA_ID_ROL as varchar(max))) AS PARA_ID,
(SELECT NOM_ROL FROM SW_ROLES_GRUPO WHERE ID_ROL=A.PARA_ID_ROL) AS DESTINO,
MIN(Cast(A.Fecha as varchar(max))) AS LLEGADA_REQUERIMIENTO,
(SELECT Estado FROM CP_Estrategia C WHERE C.Id=A.IdEstrategia) AS ESTADO,
MAX(Cast(D.UsuarioColaborador as varchar(max))) AS USUARIO_COLABORADOR,
MAX(Cast(B.VALOR_FECHA as varchar(max))) AS COMPRIMSO_PA,
(SELECT dbo.FN_WorkTime_HORAS (MIN(Fecha),SYSDATETIME())) AS HORAS,
(SELECT COUNT(*) FROM QA_TIPODIA Q WHERE TIPO_DIA IN(1) AND Q.FECHA BETWEEN A.Fecha AND SYSDATETIME()) AS DIAS,
(SELECT Nombre FROM CP_Estrategia WHERE CP_Estrategia.Id=A.IdEstrategia) AS NOMBRE_DE_LA_ESTRATEGIA
FROM (SELECT * FROM Cp_Flujo WHERE DE_ID_ROL IN (2) AND PARA_ID_ROL IN (3)) A
LEFT JOIN SW_VALORES_ROLXFLUJO B ON B.ID_ESTRATEGIA=A.IdEstrategia AND ID_CAMPO_ROLXFLUJO=11
JOIN CP_Estrategia C ON C.Id=A.IdEstrategia
JOIN Cp_Colaboradores D ON D.Id_estrategia=A.IdEstrategia
GROUP BY IdEstrategia,Fecha,DE_ID_ROL,PARA_ID_ROL,VALOR_FECHA
ORDER BY CASE WHEN VALOR_FECHA IS NULL THEN 0 ELSE 1 END, 1 DESC;
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

AYUDA CONSULTA SQL

Publicado por JUAN DE SEBASTIAN (5 intervenciones) el 13/07/2016 17:44:41
SI EFECTIVAMENTE YA QUE ES UNA BASE DE DATOS DE MAS DE 800.000 REGISTROS Y SON 4 TABLAS
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

AYUDA CONSULTA SQL

Publicado por Isaias (4558 intervenciones) el 13/07/2016 18:39:38
Para SQL Server 800 mil registros no es nada, siempre y cuando se cumplan las MEJORES PRACTICAS en el desarrollo del T-SQL, ¿hay indices?, ¿Se les da mantenimiento a estos indices?, ¿Hay estadisticos?, etc, etc, etc.
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

AYUDA CONSULTA SQL

Publicado por JUAN DE SEBASTIAN (5 intervenciones) el 13/07/2016 19:09:01
SI LO SE PERO COMO DIJE AL PRINCIPIO NO SOY EXPERTO NI TENGO MUCHA PRACTICA EN EL TEMA SOLO INTENTO HACER QUE FUNCIONE LA CONSULTA DE TODAS FORMAS SIN FIJARME EN PRACTICAS NI CONSEJOS NI INDICES O ESTRUCTURAS PARA HACERLO MEJOR, SOLO QUIERO SABER SI SE PUEDE O NO RESPONDER MI PREGUNTA, DARLE SOLUCION A ESA CONSULTA
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