#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
Мне нужна помощь с одним сценарием. У меня есть таблица, подобная этой.
DateFrom DateTo
1.1.2013 5.1.2013
2.3.2013 5.3.2013
25.5.2013 5.6.2013
.
.
И мне нужен скрипт с этим результатом.
DateFrom DateTo Result
1.1.2013 5.1.2013 5 - DateTo - DateFrom
2.3.2013 5.3.2013 9 - DateTo - DateFrom Result from previous row
25.5.2013 5.6.2013 21 - DateTo - DateFrom Result from previous row
Спасибо за помощь.
Ответ №1:
Поскольку у вас есть предыдущий, если вы используете SQL Server 2012 или новее, вы можете использовать аналитические функции для этого (я думаю, что новые версии Sybase также поддерживают это, но я недостаточно знаком с ним, чтобы подтвердить это, не говоря уже о том, чтобы сообщить вам, в какой версии он начал поддерживаться):
SELECT DateFrom,
DateTo,
Result = SUM(DATEDIFF(DAY, DateFrom, DateTo) 1) OVER(ORDER BY DateFrom)
FROM T;
Однако, если вы используете более старые версии SQL Server и Sybase или все версии Access, вам придется использовать коррелированный подзапрос, что-то вроде:
SELECT DateFrom,
DateTo,
Result = ( SELECT SUM(DATEDIFF(DAY, DateFrom, DateTo) 1)
FROM T AS T2
WHERE T2.DateFrom <= T.DateFrom
)
FROM T;