4

我有一个表dbo.Trans,其中包含一个名为bd_id(varchar) 和transfer_date(Datetime) 的 id,还有一个标识符member_idpk 是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

EG,成员从直到111使用,所以返回应该是 然后下一个将是4322008-01-012008-02-012
5

我知道该DATEDIFF()函数存在,但我不确定当日期在同一个表中时如何获得差异。

任何帮助表示赞赏。

4

3 回答 3

12

你可以试试这样的。

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

SE-数据

于 2012-08-17T14:45:32.003 回答
1

您必须选择所需的第一条和第二条记录,然后获取它们的日期并获取这两个日期的 DATEDIFF。

DATEDIFF(date1, date2);

于 2012-08-17T14:47:47.903 回答
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() 的函数,它使这更容易表达。

于 2012-08-17T14:47:08.717 回答