Salve,
probabilmente utilizzerei le funzionalita' di windowing disponibili nel linguaggio, quindi generare l'ordinamento per partizionamento codice_cliente + codice_articolo…
trivialmente,
USE tempdb;
GO
CREATE TABLE dbo.Listini (
Codice_cliente int,
Codice_articolo int,
Prezzo decimal (18,4),
Data_inizio_validita datetime
);
GO
INSERT INTO dbo.Listini
VALUES ( 1, 1, 10, '2023-01-01' ), ( 1, 1, 15, '2023-05-01' ), ( 1, 1, 16, '2023-06-01' ),
( 1, 2, 10, '2023-01-01' ), ( 1, 2, 15, '2023-05-01' ), ( 1, 2, 16, '2023-06-01' ),
( 2, 1, 10, '2023-01-01' ), ( 2, 1, 15, '2023-05-01' ), ( 2, 1, 16, '2023-06-01' ),
( 2, 2, 10, '2023-01-01' ), ( 2, 2, 15, '2023-05-01' ), ( 2, 2, 16, '2023-06-01' );
WITH cte AS (
SELECT l.Codice_cliente, l.Codice_articolo, l.Prezzo, l.Data_inizio_validita
, ROW_NUMBER() OVER (PARTITION BY l.Codice_cliente, l.Codice_articolo ORDER BY Data_inizio_validita DESC) rn
FROM dbo.Listini l
)
SELECT *
FROM cte c
WHERE c.rn = 1;
GO
DROP TABLE dbo.Listini;
--<-------------
Codice_cliente Codice_articolo Prezzo Data_inizio_validita rn
-------------- --------------- --------------------------------------- ----------------------- --------------------
1 1 16.0000 2023-06-01 00:00:00.000 1
1 2 16.0000 2023-06-01 00:00:00.000 1
2 1 16.0000 2023-06-01 00:00:00.000 1
2 2 16.0000 2023-06-01 00:00:00.000 1
salutoni romagnoli,
–
Andrea