Tengo dos consultas, la primera devuelve el código y el último precio
SELECT s.art_code AS CODE
,max(s.DocD_PUHTB) AS PRIX
,max(s.Docd_date) AS DATE
FROM documentd s
INNER JOIN (
SELECT s2.art_code
,MAX(s2.Docd_date) AS MaxDate
FROM documentd s2
GROUP BY s2.art_code
) md ON s.art_code = md.art_code
AND s.Docd_date = md.MaxDate
AND s.doc_num LIKE '%bla%'
WHERE s.docd_date >= '2019-01-01'
GROUP BY s.art_code
ORDER BY s.Art_Code
La segunda consulta actualiza otra tabla con el resultado de la primera
UPDATE art
SET art_pv = (
CASE
WHEN art_code = '000022215163'
THEN 3.608
WHEN art_code = '0013123'
THEN 5.932
WHEN art_code = '082005'
THEN 2.929
WHEN art_code = '10001862'
THEN 0.663
END
)
Mi pregunta es cómo la segunda consulta (Consulta de actualización) toma el resultado "código" y "precio" de la primera consulta (Seleccionar consulta) dinámicamente y ¿lo hace automáticamente cada hora?
2 respuestas
He seguido el enlace a su rextester, y las columnas y los datos no coinciden. Hice un SQLFiddle para probar.
creo te refieres a lo siguiente:
update art
set art_pv = n.prix
from art a,
(SELECT s.art_code AS art_code
,max(s.DocD_PUHTB) AS PRIX
,max(s.Docd_date) AS DATE
FROM documentd s
INNER JOIN (
SELECT s2.art_code as art_code
,MAX(s2.Docd_date) AS MaxDate
FROM documentd s2
GROUP BY s2.art_code
) md ON s.art_code = md.art_code
AND s.Docd_date = md.MaxDate
AND s.doc_num LIKE '%bla%'
WHERE s.docd_date >= '2019-01-01'
GROUP BY s.art_code) n
where n.art_code = a.art_code;
Para ejecutar esta consulta en un horario, puede crear un trabajo en el Agente SQL Server.
Para la pregunta uno:
Usa esta consulta ==>
SELECT s.art_code as CODE, max(s.DocD_PUHTB)as PRIX, max(s.Docd_date) as DATE
FROM documentd s
Where s.doc_num like '%bla%' and s.docd_date >= '2019-01-01'
GROUP BY s.art_code
Para la pregunta dos:
Insertar en # t1 y usar con:
SELECT s.art_code as CODE, max(s.DocD_PUHTB)as PRIX, max(s.Docd_date) as DATE ,CASE
WHEN art_code = '000022215163'
THEN 3.608
WHEN art_code = '0013123'
THEN 5.932
WHEN art_code = '082005'
THEN 2.929
WHEN art_code = '10001862'
THEN 0.663
END
) as NewCol
Into #t1
FROM documentd s
Where s.doc_num like '%bla%'
GROUP BY s.art_code
Update documentd
Set art_pv = #t1.NewCol
From #t1
Nuevas preguntas
sql
El lenguaje de consulta estructurado (SQL) es un lenguaje para consultar bases de datos. Las preguntas deben incluir ejemplos de código, estructura de tabla, datos de muestra y una etiqueta para la implementación de DBMS (por ejemplo, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, etc.) que se utiliza. Si su pregunta se relaciona únicamente con un DBMS específico (usa extensiones / características específicas), use la etiqueta de ese DBMS en su lugar. Las respuestas a las preguntas etiquetadas con SQL deben usar SQL estándar ISO / IEC.