Скажем, у меня есть следующая таблица:
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
Как выбрать выделенные строки, то есть, где Value
изменилось? В основном я пытаюсь найти время, когда Value
изменилось, поэтому я могу выполнять другие запросы на основе этих временных интервалов. Решение не должно зависеть от знания Value
или Time
заранее.
Мне кажется, что это не должно быть очень сложно (но мне это достаточно сложно!).
В настоящее время я использую SQL Server 2008, хотя у меня есть доступ к 2012 году, если новые окна/аналитические функции полезны.
Я попытался адаптировать решения здесь http://blog.sqlauthority.com/2011/11/24/sql-server-solution-to-puzzle-simulate-lead-and-lag-without-using-sql-server-2012-analytic-function/, но мой запрос не завершился через час! Я думаю, что соединения взорвут размер строки на что-то неуправляемое (или я напортачил).
Я могу решить эту проблему с помощью кода С# и нескольких вызовов db, но это похоже на то, что можно было бы сделать в функции с табличной оценкой или SP, которая была бы намного приятнее.
Кроме того, решение, которое работает только с увеличением Value
, в порядке, если это проще.