这是我的第一篇帖子,我在MSSQL上真的很生气所以要温柔: - )
我有一张表,我试图使用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
我正在尝试制作第三列,因为查询运行会使第三列显示日期(以天为单位)的差异... 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
类似的东西......那么,有没有办法将我的查询转换成像这样运行的日期?
非常感谢提前!
克里斯
答案 0 :(得分: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,其中包含一个Identity Filed(它将充当一个rownumber)然后将应用与上述2005相同的逻辑。只有重大改变将代替我们将使用的CTE Temp Table变量而不是rownumber我们将在临时表中使用identity。