SQL Server - update datos

 
Vista:
sin imagen de perfil
Val: 48
Ha disminuido su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

update datos

Publicado por JJ (26 intervenciones) el 18/12/2019 19:31:33
Buenas tardes,

Necesito actualizar los datos de una persona en una nueva BD, sin embargo, el metodo de la actualización inicial consta de 3 criterios (puede que a futuro se requieran 3 o mas pero de momento requiero esos 3 criterios) los cuales son: que el ID exista en las dos BD, y que seleccione la primer fecha que realizó la prueba y el resultado de la misma..
Sin embargo, al realizar la consulta, el resultado que elige no en todos los casos es de la primer prueba que realizó (esto debido a que por un error en el sistema un usuario realizó varias pruebas).

La base datos inicial muestra lo siguiente:




1

Al realizar la prueba de consulta para actulizar a la bd nueva, muestra lo siguiente:


2

pero lo que realmente ocupamos es lo siguiente:


3


el script de consulta que se esta utilizando es el siguiente:

1
2
SELECT TIPO_PRUEBA,ID, MIN([FECHA_PRUEBA]) FP, RESULTADO FROM BD_1
WHERE TIPO_PRUEBA = 'AAAAAA' AND ID = 'CX112410' group by TIPO_PRUEBA, ID,RESULTADO

SE HACE LA PRUEBA SOLO CON UN ID DE MODO EJEMPLO, CLARAMENTE HAY MUCHOS MAS ID
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 Francisco
Val: 73
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

update datos

Publicado por Francisco (29 intervenciones) el 23/12/2019 16:38:16
Hola

Como no se exactamente que es lo que quieres, te muestro dos sentencias que arrojan el mismo resultado, el primero filtra por el resultado, el segundo limita el resultado al 1er registro.

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
DROP TABLE IF EXISTS test;
CREATE TABLE test(
    id_key serial,
    dpto varchar,
    id varchar,
    fecha_prueba date,
    resultado varchar,
    tipo_prueba varchar
);
 
INSERT INTO test(dpto,id,fecha_prueba,resultado,tipo_prueba) VALUES
    ('A','CX112410','2019-05-28','APROBADO','AAAAAA'),
    ('B','CX112410','2019-05-28','APROBADO','AAAAAA'),
    ('A','CX112410','2019-08-26','REPROBADO','AAAAAA'),
    ('B','CX112410','2019-08-26','REPROBADO','AAAAAA'),
    ('A','CX112410','2019-09-06','REVISION','AAAAAA'),
    ('B','CX112410','2019-09-06','REVISION','AAAAAA');
 
 
SELECT tipo_prueba, id, MIN(fecha_prueba) fp, resultado
FROM test
WHERE
        tipo_prueba = 'AAAAAA'
    AND id = 'CX112410'
    AND resultado = 'APROBADO'
GROUP BY tipo_prueba, id, resultado
ORDER BY MIN(fecha_prueba), resultado;
 
SELECT tipo_prueba, id, MIN(fecha_prueba) fp, resultado
FROM test
WHERE
        tipo_prueba = 'AAAAAA'
    AND id = 'CX112410'
GROUP BY tipo_prueba, id, resultado
ORDER BY MIN(fecha_prueba), resultado
LIMIT 1;

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
Imágen de perfil de Javier
Val: 111
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

update datos

Publicado por Javier (45 intervenciones) el 24/12/2019 03:45:02
El detalle esta en la columna resultado, al no ser un solo tipo de dato te arroja mas de uno, obviamente, una opción seria, que hagas tu query sin esa columna en una tabla temporal y al obtener el resultado esperado hagas un update incluyendo el dato de la columna resultado, con eso obtendrías lo que buscas.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT TIPO_PRUEBA,ID, MIN([FECHA_PRUEBA]) as Fecha, CONVERT(VARCHAR(20),'') as Resultado FP
#temporal     <==== AQUI EL NOMBRE DE TU TABLA TEMPORAL
FROM BD_1
WHERE TIPO_PRUEBA = 'AAAAAA' AND ID = 'CX112410' group by TIPO_PRUEBA, ID
 
 
UPDATE #Temporal
SET Resultado = x.RESULTADO
FROM
(
   SELECT * FROM  BD_1
WHERE TIPO_PRUEBA = 'AAAAAA' AND ID = 'CX112410' group by TIPO_PRUEBA, ID
) x
WHERE x.TIPO_PRUEBA =  #Temporal.TIPO_PRUEBA  AND x.ID = #Temporal.ID AND x.Fecha = #Temporal.Fecha


Algo así, posiblemente tengas que optimizar el codigo dependiendo de tus necesidades pero creo te funcionara.
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