none
Selezionare una riga per ogni chiave esterna RRS feed

  • Domanda

  • Ciao a tutti

    Un piccolo aiuto per scrivere una query. Supponiamo di avere questa tabella:

    id fk titolo data
    1 11 A 23/07/2018
    2 11 B 20/07/2018
    3 12 C 21/07/2018
    4 12 D 19/07/2018
    5 13 E 24/07/2018
    6 13 F 22/07/2018
    7 13 G 18/07/2018
    8 13 H 16/07/2018

    Vorrei come risultato una riga per ogni 'fk', quella più vicina al giorno in cui eseguo la query dando la precedenza a quelle successive (Es. se oggi è 23 e ho una riga con 24 e una con 22, prendo 24)

    Voglio questo come risultato:

    id fk titolo data
    1 11 A 23/07/2018
    3 12 C 21/07/2018
    5 13 E 24/07/2018
    Grazie mille
    lunedì 23 luglio 2018 07:52

Risposte

  • Ciao,

    non so se ho capito perfettamente, ma prova questo:

    USE tempdb;
    GO
    
    DECLARE @today date = '20180720'
    DECLARE @foo TABLE
    (
    	  id int NOT NULL PRIMARY KEY
    	, fk int NOT NULL
    	, titolo varchar(5) NOT NULL
    	, [data] date NOT NULL
    );
    
    INSERT INTO @foo (id, fk, titolo, [data])
    VALUES
          (1, 11, 'A', '20180723')
    	, (2, 11, 'B', '20180720')
    	, (3, 12, 'C', '20180721')
    	, (4, 12, 'D', '20180719')
    	, (5, 13, 'E', '20180724')
    	, (6, 13, 'F', '20180722')
    	, (7, 13, 'G', '20180718')
    	, (8, 13, 'H', '20180716');
    
    WITH CTE AS 
    (
    	SELECT
    		*
    		, ROW_NUMBER() OVER(PARTITION BY fk ORDER BY [data]) AS rnum
    	FROM
    		@foo
    	WHERE
    		data > @today
    )
    
    SELECT * FROM CTE WHERE rnum = 1;


    Alessandro Alpi - Data Platfomr MVP - CTO & Co-Founder Engage IT Services S.r.l.

    martedì 24 luglio 2018 11:59
    Moderatore