SQL Server 2005 - группировка значений, отображение только изменений - PullRequest
1 голос
/ 07 марта 2012

Я пытаюсь сгруппировать набор значений, но я хочу отображать значения только в случае изменения.

Некоторые примеры данных

value | date_loaded | 
  1   |  2012-03-07 |
  1   |  2012-03-06 |
  1   |  2012-03-05 |
  3   |  2012-03-04 |
  4   |  2012-03-03 |
  1   |  2012-03-02 |

Так что я бы хотелотображать последнее значение с самой ранней датой, например,

value | date_loaded | 
  1   |  2012-03-05 |
  3   |  2012-03-04 |
  4   |  2012-03-03 |
  1   |  2012-03-02 |

Как лучше всего это сделать?Можно ли сделать заявление if?Если значение 1 отличается от значения 2, +1 «изменить»?Поэтому я мог бы сгруппировать значения по «change1», «change2» и т. Д .?

1 Ответ

2 голосов
/ 07 марта 2012

Я бы использовал общее табличное выражение для включения последовательного номера строки на основе date_loaded, а затем использовал бы его в самосоединении следующим образом:

CREATE TABLE #temp (
    value INT,
    date_loaded DATETIME
)

INSERT INTO #temp VALUES (1,'2012-03-7')
INSERT INTO #temp VALUES (1,'2012-03-6')
INSERT INTO #temp VALUES (1,'2012-03-5')
INSERT INTO #temp VALUES (3,'2012-03-4')
INSERT INTO #temp VALUES (4,'2012-03-3')
INSERT INTO #temp VALUES (1,'2012-03-2')

;WITH cte AS (SELECT ROW_NUMBER() OVER (ORDER BY date_loaded) AS n, value, date_loaded FROM #temp)
SELECT t2.value, t2.date_loaded
FROM cte t2 LEFT JOIN cte t1 ON t2.n = t1.n + 1
WHERE t2.value <> ISNULL(t1.value, -1)

DROP TABLE #temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...