0

这是我的第一篇文章,我对 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

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

提前谢谢了!

克里斯

4

1 回答 1

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 并带有一个身份归档(它将充当一个行号),然后将应用与上述 2005 年相同的逻辑。只有重大变化将是我们将使用临时表变量而不是 CTE我们将在临时表中使用标识而不是行号。

于 2010-05-04T14:18:46.370 回答