Ho una tabella:Come trovare il valore successivo all'interno di una tabella in base a determinati criteri
ID | Name | Date
1 | ABC | 2015-01-01
2 | XYZ | 2015-01-02
3 | ABC | 2015-01-03
4 | ABC | 2015-01-04
Voglio interrogare questa tabella modo tale che il risultato diventa:
ID | Name | Date | NextDate
1 | ABC | 2015-01-01 | 2015-01-03
2 | XYZ | 2015-01-02 | null
3 | ABC | 2015-01-03 | 2015-01-04
4 | ABC | 2015-01-04 | null
One la soluzione è:
select t1.*,
(select min(t2.Date) from TAB t2 where t2.ID > t1.ID t2.Name = t1.Name) NextDate
from TAB t1
Ma questo è molto lento come stiamo facendo l'aggregazione su ogni riga. C'è una soluzione alternativa a questo che è più efficiente di quanto sopra?
Ogni possibilità di aggiornare il proprio SQL Server 2008 per 2012 o più recente? La funzione ['lead'] (https://msdn.microsoft.com/en-us/library/hh213125.aspx) sembra adattarsi esattamente al tuo conto. – Mureinik