SQL Server : Obtener registro según condiciona y fecha mínima
Publicado por Daniel (2 intervenciones) el 11/11/2020 04:03:31
Hola, favor agradeceré su ayuda respecto a obtener el siguiente resultado en sql server 2008/2012:
Tabla Marcas :

Tabla Mantenciones :

Tabla deseada :

Debo obtener según una marca su mantención mas próxima a su fecha de ingreso.
Agradeceré algún ejemplo o guía respecto a esto, gracias.
Tengo el siguiente codigo, pero el cross apply con mas de 1000 registros se torna muy pesada...demora demasiado...favor su apoyo.
SCRIPT :
create table #marcas
(id int, marca nvarchar(40), fecha_ingreso date)
create table #mantenciones
(id int, marca nvarchar(40), fecha_mantencion date)
insert into #marcas values (1,'FIAT','2020-03-10'),(2,'FORD','2020-04-05'),(3,'MAZDA','2020-05-01');
insert into #mantenciones values (1,'FIAT','2020-03-15'),(2,'FIAT','2020-03-17'),(3,'FIAT','2020-03-20');
insert into #mantenciones values (4,'FORD','2020-04-20'),(5,'FORD','2020-04-07');
insert into #mantenciones values (6,'MAZDA','2020-05-01'),(7,'MAZDA','2020-05-02');
SELECT * FROM #marcas;
SELECT * FROM #mantenciones
SELECT m.id,
m.marca,
ma.id,
ma.fecha_mantencion
FROM #marcas m
CROSS APPLY (SELECT TOP 1 *
FROM #mantenciones
WHERE Marca = m.Marca
AND fecha_mantencion >= m.fecha_ingreso
ORDER BY fecha_mantencion) ma
;
DROP TABLE #mantenciones
DROP TABLE #marcas
Tabla Marcas :

Tabla Mantenciones :

Tabla deseada :

Debo obtener según una marca su mantención mas próxima a su fecha de ingreso.
Agradeceré algún ejemplo o guía respecto a esto, gracias.
Tengo el siguiente codigo, pero el cross apply con mas de 1000 registros se torna muy pesada...demora demasiado...favor su apoyo.
SCRIPT :
create table #marcas
(id int, marca nvarchar(40), fecha_ingreso date)
create table #mantenciones
(id int, marca nvarchar(40), fecha_mantencion date)
insert into #marcas values (1,'FIAT','2020-03-10'),(2,'FORD','2020-04-05'),(3,'MAZDA','2020-05-01');
insert into #mantenciones values (1,'FIAT','2020-03-15'),(2,'FIAT','2020-03-17'),(3,'FIAT','2020-03-20');
insert into #mantenciones values (4,'FORD','2020-04-20'),(5,'FORD','2020-04-07');
insert into #mantenciones values (6,'MAZDA','2020-05-01'),(7,'MAZDA','2020-05-02');
SELECT * FROM #marcas;
SELECT * FROM #mantenciones
SELECT m.id,
m.marca,
ma.id,
ma.fecha_mantencion
FROM #marcas m
CROSS APPLY (SELECT TOP 1 *
FROM #mantenciones
WHERE Marca = m.Marca
AND fecha_mantencion >= m.fecha_ingreso
ORDER BY fecha_mantencion) ma
;
DROP TABLE #mantenciones
DROP TABLE #marcas
Valora esta pregunta


0