2016-10-19 15 views
0
M Qty TStamp DStamp 
VF6 1 11:34:38 AM 8/11/2016 11:34:38 AM 
VF6 1 1:06:01 PM 8/11/2016 1:06:01 PM 
VF6 1 2:16:30 PM 8/11/2016 2:16:30 PM 
VF6 1 3:30:20 PM 8/11/2016 3:30:20 PM 
VF6 1 4:03:48 PM 8/11/2016 4:03:48 PM 
VF6 1 4:52:23 PM 8/11/2016 4:52:23 PM 
VF6 1 11:06:31 PM 8/11/2016 11:06:31 PM 
VF6 1 12:23:23 AM 8/12/2016 12:23:23 AM 
VF6 1 1:23:26 AM 8/12/2016 1:23:26 AM 
VF6 1 2:43:20 AM 8/12/2016 2:43:20 AM 
VF6 1 3:40:12 AM 8/12/2016 3:40:12 AM 
VF6 1 4:40:09 AM 8/12/2016 4:40:09 AM 
VF6 1 5:38:44 AM 8/12/2016 5:38:44 AM 
VF6 1 6:52:05 AM 8/12/2016 6:52:05 AM 
VF6 1 8:00:43 AM 8/12/2016 8:00:43 AM 

上記はいくつかのサンプルデータです。 私はレコード間の経過時間を取得したいです。たとえば、私からの経過時間を知りたいのですが:上記のレコードを使用したアクセスの経過時間

11:34:38 AM and 1:06:01 PM 

フィールドが同じレコードである場合、それはかなり簡単ですが、私は、経過時間を生成するための情報の上に使用して困難を抱えています。どんな指導も大きな助けになるでしょう。

ありがとうございました!

答えて

0

他のDBMSシステムでは、前の行または次の行のいずれかから値を取得することは、LAGまたはLEAD機能によって実行されます。 Accessはこれらの関数をサポートしていませんが、サブクエリを使用して同じことを達成できます。以下のサンプルSQLを参照してください。ここでは、テーブル名が "TableName"であると仮定しています。

経過時間を表示する単位、または各行を前の行または次の行と比較するかどうかについては言及していません。ここでは、両方の比較が行われ、経過時間が秒単位で表示されます。

SELECT t.M 
    , t.[Qty TStamp] 
    , t.DStamp 
    , (SELECT TOP 1 t1.DStamp 
     FROM TableName t1 
     WHERE t1.DStamp < t.DStamp 
     ORDER BY t1.DStamp DESC 
     ) AS PreviousDStamp 
    , (SELECT TOP 1 t2.DStamp 
     FROM TableName t2 
     WHERE t2.DStamp > t.DStamp 
     ORDER BY t2.DStamp 
     ) AS NextDStamp 
     , DateDiff("s", PreviousDStamp, t.DStamp) AS Seconds_From_Previous 
     , DateDiff("s", t.DStamp, NextDStamp) AS Seconds_To_Next 
FROM TableName t 
ORDER BY t.DStamp 
; 

ご質問は唯一の時間値を比較言及したにも関わらず、このSQLは、実際に完全な日付/時刻値(すなわちDStamp列)とを比較することに注意してください。この方法では、行間の日付が変更されてもデータは正確になります。

0

それは難しいことではありません。

Select *, 
    (Select Max(T.DStamp) 
    From YourTable As T 
    Where T.DStamp < YourTable.DStamp) As LastDStamp 
From YourTable 

または他の方法で回避:

Select *, 
    (Select Min(T.DStamp) 
    From YourTable As T 
    Where T.DStamp > YourTable.DStamp) As NextDStamp 
From YourTable 

あなただけtimepartが必要な場合:

Select *, 
    (Select TimeValue(Max(T.DStamp)) 
    From YourTable As T 
    Where T.DStamp < YourTable.DStamp) As LastTStamp 
From YourTable 
関連する問題