SQL - 使用datediff作为查询正在运行?

时间:2010-05-04 14:12:10

标签: sql-server datediff

这是我的第一篇帖子,我在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

类似的东西......那么,有没有办法将我的查询转换成像这样运行的日期?

非常感谢提前!

克里斯

1 个答案:

答案 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。