Diciamo che ho la seguente tabella:Selezionare le righe in cui il valore della colonna è cambiato
Value Time
0 15/06/2012 8:03:43 PM
1 15/06/2012 8:03:43 PM *
1 15/06/2012 8:03:48 PM
1 15/06/2012 8:03:53 PM
1 15/06/2012 8:03:58 PM
2 15/06/2012 8:04:03 PM *
2 15/06/2012 8:04:08 PM
3 15/06/2012 8:04:13 PM *
3 15/06/2012 8:04:18 PM
3 15/06/2012 8:04:23 PM
2 15/06/2012 8:04:28 PM *
2 15/06/2012 8:04:33 PM
Come faccio a selezionare le righe stellati, cioè, dove Value
è cambiato? Fondamentalmente sto cercando di trovare il tempo in cui è stato modificato Value
così posso fare altre domande sulla base di quegli intervalli di tempo. La soluzione non dovrebbe dipendere dal conoscere Value
o Time
in anticipo.
Mi sembra che questo non dovrebbe essere molto difficile (ma è abbastanza difficile per me a quanto pare!).
Attualmente sto utilizzando SQL Server 2008 sebbene abbia accesso al 2012 se le nuove funzioni finestra/analitica sono utili.
Ho provato ad adattare le soluzioni qui http://blog.sqlauthority.com/2011/11/24/sql-server-solution-to-puzzle-simulate-lead-and-lag-without-using-sql-server-2012-analytic-function/ ma la mia richiesta non è stata completata dopo un'ora! Penso che le unioni esplodano la dimensione della riga a qualcosa di ingestibile (o l'ho rovinato).
Posso risolvere questo problema con codice C# e più chiamate db, ma sembra qualcosa che potrebbe essere fatto in una funzione con valori di tabella o SP che sarebbe molto più bello.
Inoltre, una soluzione che funziona solo con l'aumento di Value
è OK se è più semplice.
Wow che era veloce L'aumento del valore è OK. Lo proverò. – agentnega
Fantastico, grazie @ Aaron Bertrand. Sui miei dati la seconda versione ha impiegato meno del doppio del tempo della prima versione, quindi la differenza di prestazioni non è poi così male. – agentnega
Come convertire questa query per includere anche un ID (nuova colonna) nell'output risultante? – ThinkCode