我有一个表dbo.Trans
,其中包含一个名为bd_id
(varchar)和transfer_date
(日期时间)的ID,还有一个标识符member_id
pk是trns_id
并且是顺序的
表中存在bd_id
和member_id
的重复项。
transfer_date |bd_id| member_id | trns_id
2008-01-01 00:00:00 | 432 | 111 | 1
2008-01-03 00:00:00 | 123 | 111 | 2
2008-01-08 00:00:00 | 128 | 111 | 3
2008-02-04 00:00:00 | 123 | 432 | 4
.......
对于每个member_id,我想知道日期和每个bd_id
之间的天数
E.G。,成员111
使用432
中的2008-01-01
到2008-02-01
,因此返回2
接下来就是5
我知道DATEDIFF()
函数存在但我不确定当日期在同一个表中时如何获得差异。
任何帮助表示感谢。
答案 0 :(得分:10)
你可以尝试这样的事情。
select T1.member_id,
datediff(day, T1.transfer_date, T3.transfer_date) as DD
from YourTable as T1
cross apply (select top 1 T2.transfer_date
from YourTable as T2
where T2.transfer_date > T1.transfer_date and
T2.member_id = T1.member_id
order by T2.transfer_date) as T3
答案 1 :(得分:1)
您必须选择所需的第一和第二条记录,然后获取它们的日期并获得这两个日期的DATEDIFF。
DATEDIFF(date1, date2);
答案 2 :(得分:0)
您的问题是获得下一个成员日期。
以下是使用相关子查询获取下一个日期的示例:
select t.*, datediff(day, t.transfer_date, nextdate) as Days_Between
from (select t.*,
(select min(transfer_date)
from trans t2
where t.bd_id = t2.bd_id and
t.member_id = t2.member_id and
t.transfer_date < t2.transfer_date
) as NextDate
from trans t
) t
SQL Server 2012有一个名为lag()的函数,可以让它更容易表达。