РЕДАКТИРОВАТЬ: см. Обновленный вопрос здесь: SQL: Выберите самое последнее последовательно различающееся значение с группировкой
У меня проблемы с написанием запроса, в котором было бы выбрано последнее «новое» последовательно различающееся значение. Поскольку это немного неоднозначно, вот пример для объяснения (предположим, что номер строки указывает на последовательность; в моем выпуске строки упорядочены по дате):
|--------|-------|
| RowNum | Col A |
|--------|-------|
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | B |
| 5 | A |
| 6 | B |
Выберет:
| 6 | B |
Хотя B также появляется в строках 2 и 4, тот факт, что строка 5 содержит A, означает, что B в ряду 6 последовательно различается. Но если таблица выглядела так:
|--------|-------|
| RowNum | Col A |
|--------|-------|
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | B |
| 5 | A |
| 6 | A | <--
Тогда мы бы хотели выбрать:
| 5 | A |
Я думаю, что это было бы более легкой проблемой, если бы меня не интересовали значения, отличающиеся друг от друга, но не последовательные. Я не совсем уверен, как даже учитывать последовательность при создании запроса.
Я пытался решить эту проблему, вычисляя минимальные / максимальные числа строк, где появляется каждое значение Col A. Этот расчет (с использованием второй таблицы образцов) даст такой результат:
|--------|--------|--------|
| ColA | MinRow | MaxRow |
|--------|--------|--------|
| A | 1 | 6 |
| B | 2 | 4 |
| C | 3 | 3 |
Однако это то, где я застреваю, потому что, хотя я могу правильно выбрать A в качестве значения для использования, я не знаю, как использовать другие строки в этой таблице, чтобы распознать, что мы хотим A в строке 5 ( так как он прерван B на 4), а не A в строке 1 ...
Буду признателен за любую помощь в решении этой проблемы, если это вообще возможно сделать в SQL. Я использую SQL 2008 SP4.