3

以下は、ミリ秒アクセスでの私のテーブル構造です。

SNo    Time        EmpId    Date      Type
-------------------------------------------
  1   09:20:53 AM    1     9/12/2012  IN      
  2   09:50:12 AM    1     9/12/2012  OUT 
  3   09:52:09 AM    1     9/12/2012  IN
  4   12:15:10 PM    1     9/12/2012  OUT

出力は時間を比較し、最初の 2 行と次の 2 行 (3 番目と 4 番目) の違いを見つける必要があります。必要な出力は、

EmpId   Date          Time
 1     9/12/2012     0:30:41
 1     9/12/2012     2:23:01

誰かが親切に助けてくれませんか.本当に感謝します, ありがとう.

4

1 に答える 1

0

DateTimeフィールドが両方とも日付/時刻データ型であると仮定すると、このクエリはあなたが望むものに近いと思います。それらが実際にテキスト型である場合、それらの値を で変換できますCDate()しかし、どちらにしても、日付と時刻の両方を保持する単一のフィールドを使用すると、それぞれのフィールドを個別に保持するよりもクエリが簡単になると思います。

SELECT
    sub.SNo,
    sub.EmpId,
    sub.Type,
    sub.start_time,
    sub.end_time,
    Format(sub.end_time - sub.start_time, 'h:nn:ss') AS duration
FROM
    (
        SELECT
            o.SNo,
            o.Date + o.Time AS end_time,
            o.EmpId,
            o.Type,
            (
                SELECT TOP 1 i.Date + i.Time
                FROM YourTable AS i
                WHERE
                        i.Type = 'IN'
                    AND i.EmpId = o.EmpId
                    AND i.Date + i.Time < o.Date + o.Time
                ORDER BY i.Date, i.Time DESC
            ) AS start_time
        FROM YourTable AS o
        WHERE o.Type='OUT'
    ) AS sub;

ところで、、、DateおよびTimeType予約語であるため、フィールド名として理想的な選択肢ではありません。これらの名前はこのクエリにとって大きな問題ではありませんでしたが、可能であればこれらのフィールドの名前を変更することで、他の潜在的な問題を回避できます。

于 2012-09-17T07:04:36.890 に答える