Я ищу способ получить самое нижнее следующее значение в последовательности. В принципе, у меня есть набор данных Даты, и я хочу, чтобы он вернулся на следующий день, если это не последняя дата в базе данных, а затем я хочу, чтобы она вернула это вместо этого.Имейте столбец с наименьшим возможным следующим значением (самосоединение таблицы)
Мой текущий запрос выглядит, как это и почти работает - конечно до точки, где я хочу последнюю возможное значение вместо следующего:
SELECT
a.date,
a.key,
a.description,
b.date NextDate
FROM
my_table a
CROSS APPLY (SELECT TOP 1
b.date
FROM
my_table b
WHERE
a.key = b.key AND
a.date < b.date) b
Sample данные:
+----------+-----+-------------+
| date | key | description |
+----------+-----+-------------+
| 20170101 | atx | xxx |
| 20161228 | hfn | xxx |
| 20161222 | ktn | xxx |
| 20161214 | yqe | xxx |
| 20161204 | olp | xxx |
| 20161122 | bux | xxx |
+----------+-----+-------------+
Каким должен быть результат:
+----------+-----+-------------+----------+
| date | key | description | NextDate |
+----------+-----+-------------+----------+
| 20170101 | atx | xxx | 20170101 |
| 20161228 | hfn | xxx | 20170101 |
| 20161222 | ktn | xxx | 20161228 |
| 20161214 | yqe | xxx | 20161222 |
| 20161204 | olp | xxx | 20161214 |
| 20161122 | bux | xxx | 20161204 |
+----------+-----+-------------+----------+
Вы забыли предложение 'ORDER BY' в' CROSS APPLY 'запрос. – DVT
Какая версия сервера sql, которую вы используете –
, лучше указала ее до 2014 года. – Spurious