0

h2データベースを使用しています。USER、SCHEDULEWORKER、SECURITYACCESS の 3 つのテーブルがあります。

ユーザー

userNumber, firstName, lastName

スケジュールワーカー

USERNUMBER, STARTDATE, ENDDATE  

セキュリティアクセス

USERNUMBER, DATEACCESS, DOOR

STARTDATE, ENDDATE and DATEACCESSタイムスタンプを使用しますdatatype

1 日働くと仮定し、開始日以降にメインドアに入ったすべてのユーザーを知りたいと思います。

したがって、この例では

SCHEDULEWORKER  
USERNUMBER      STARTDATE               ENDDATE  
4141            2012-07-02 07:30:00.0   2012-07-02 16:30:00.0
4123            2012-07-02 07:30:00.0   2012-07-02 16:30:00.0

SECURITYACCESS
USERNUMBER      DATEACCESS      DOOR  
4145    2012-07-02 07:31:56.0   MainDoor
4123    2012-07-02 07:29:56.0   MainDoor

私はを頂きたい

USERNUMBER  STARTDATE              ENDDATE                DATEACCESS        DOOR        late
4141    2012-07-02 07:30:00.0  2012-07-02 16:30:00.0  2012-07-02 07:31:56.0 MainDoor    00:01:56

このクエリを実行するには、フィールドのタイムスタンプを分割する必要がありますか?

4

1 に答える 1

2

遅くなりますが、1 日の SECURITYACESS が多い場合は、その日の最初のアクセスを比較する必要があります。私はh2を扱っていないので、遅い列のタイムスタンプ計算を管理する必要があります

select SW.USERNUMBER, STARTDATE, ENDDATE, DATEACCESS, DOOR, (h2 calculations on timestamps) as late
FROM SCHEDULEWORKER AS SW 
  inner join SECURITYACCESS AS SA on SW.USERNUMBER=SA.USERNUMBER
  inner join (SELECT USERNUMBER, MIN(DATEACCESS) as ACCESS
              FROM SECURITYACCESS 
              GROUP BY USERNUMBER, YEAR(DATEACCESS), DAY_OF_YEAR(DATEACCESS)) AS MSA ON SW.USERNUMBER = MSA.USERNUMBER AND MSA.ACCESS = SA.DATEACCESS
WHERE SW.STARTDATE < MSA.ACCESS

where 条件がさらにある場合: 日付範囲の可能性またはパラメーターとしてのユーザー番号は、パフォーマンスを向上させるために MSA クエリを変更する必要があります。

タイムスタンプから日付への変換または句によるグループ化のための関数が見つかりませんでした。

于 2012-11-09T15:04:26.847 に答える