2010-05-04 29 views
0

它是我的第一篇文章,我真的在MSSQL上生锈,所以要温柔:-)SQL - 使用datediff作为查询正在运行?

我有一个表,我正在尝试使用datediff。我认为这将是最简单的,如果我发布查询和第一名的成绩

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 

我试图让第三列的查询运行,这将使显示的日期之差(天)第三列...项目为11和17 WHATID ...之间,所以我喜欢这个结果后:

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喜欢跑步那?

非常感谢提前!

克里斯

回答

0

如果使用SQL Server 2005或以上,你可以做一个CTE和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与身份提交(这将作为一个rownumber),然后将应用与上述2005年相同的逻辑。只有重大变化将代替CTE我们将使用临时表变量,而不是rownumber我们将使用身份在温度表。

+0

嗨,我应该事先指定,但这需要运行在SQL Server 2000以及2005年......虽然在2005年很好地工作!抱歉! :-( – Twiss 2010-05-05 08:42:02