4

(varchar) と(Datetime)dbo.Transという ID を含むテーブルがあり、識別子pkもシーケンシャルですbd_idtransfer_datemember_idtrns_id

との重複がテーブルbd_idmember_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、メンバーはfromまで111使用されるため、returnは Then nextになります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

必要な 1 番目と 2 番目のレコードを選択し、それらの日付を取得して、これら 2 つの日付の 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 に答える