2010-05-04 2 views
0

Его первый пост, и я действительно ржавый на MSSQL, поэтому будьте нежны :-)SQL - используется tariff как запрос?

У меня есть таблица, в которой я пытаюсь использовать датифф. Я думаю, что это будет проще, если я отправляю запрос и первые результаты

select mh.agetime, mh.whatid 

from mailhistory mh 
inner join mail m 
on mh.mailid=m.myid 
where (mh.whatid=17 or mh.whatid=11 or mh.whatid=0) and maincontactid=287816 and mailid=276086 

order by agetime 

Действительно, maincontactid и mailid в настоящее время только там, чтобы ограничить результаты в то время как я сделать запрос.

Результаты таковы ...

AGETIME     WHATID 
1899-12-30 00:00:00.000 0 
1899-12-30 00:48:10.000 11 
1899-12-31 02:16:49.000 17 
1899-12-31 06:29:08.000 11 
1900-01-18 15:31:40.000 17 
1900-02-11 14:56:59.000 11 

Я пытаюсь сделать третий столбец в качестве прогонов запросов, которые сделают третий столбец, показывающий разницу в датах (в днях) ... между пунктами с WHATID 11 и 17 ... так что я после результатов, как это:

AGETIME     WHATID DIFFERENCE 
1899-12-30 00:00:00.000 0   NULL 
1899-12-30 00:48:10.000 11  0 
1899-12-31 02:16:49.000 17  1 
1899-12-31 06:29:08.000 11  0 
1900-01-18 15:31:40.000 17  18 
1900-02-11 14:56:59.000 11  22 

что-то в этом роде ... так что, есть способ, чтобы преобразовать мой запрос, чтобы сделать бегущую DateDiff как что?

Большое спасибо заранее!

Chris

ответ

0

При использовании SQL Server 2005 или выше, вы можете сделать КТР и назначить row_number к текущему результирующем. Тогда вы можете иметь самостоятельное присоединение к CTE с Current.Row_Num = Previous.Row_Num -1, а затем можете получить разницу в дате. Подход будет похож, как показано в этой ссылке:

http://www.kodyaz.com/articles/sql-select-previous-and-next-rows-with-current-row-in-tsql.aspx

Для SQL Server 2000

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

я бы, вероятно, создать переменную временную таблицу вместо CTE с присвоенной идентификацией (которая будет действовать как рябь), а затем применит ту же логику, что и описанную выше в 2005 году. Только основное изменение будет вместо CTE, мы будем использовать переменную Temp Table и вместо rownumber будем использовать идентификатор в temp Таблица.

+0

Привет, я должен был указать заранее, но это нужно запускать на SQL Server 2000, а также в 2005 году ... отлично работает на 2005 год! Сожалею! :-( – Twiss

 Смежные вопросы

  • Нет связанных вопросов^_^