2017-09-25 2 views
0

私はmysqlに時間割テーブルを持っています。私はそれに新しいレコードをプッシュする前に、私はそれが既存の日時と重複しているかどうかを確認する必要があります。デシベルでテーブル(mysql)の時間割当をチェックする方法は?

サンプル・データが

Start Date End Date | Start Time | End Time 
2017-01-01 | 2017-01-01 | 10:00  | 11:00 
2017-01-01 | 2017-01-01 | 08:00  | 09:00 
2017-01-01 | 2017-01-02 | 01:00  | 02:00 

以下の通り最後のレコードは、2017年1月1日と2017年1月2日の両方を意味し、午前2時まで時間午前1時は、両方の日に割り当てられています。

以下は、プッシュしようとするレコードの例です。期待される結果が最後の列として表示されます。 クエリを実行し、これらのレコードがdbで重複しないようにする必要があります。

Start Date End Date | Start Time End Time 
2017-01-01 | 2017-01-01 | 01:30  | 01:31 | OVERLAP 
2017-01-02 | 2017-01-02 | 01:30  | 01:31 | OVERLAP 
2017-01-01 | 2017-01-02 | 01:30  | 01:31 | OVERLAP 
2017-01-01 | 2017-01-02 | 00:30  | 00:31 | PASS 
2017-01-03 | 2017-01-03 | 00:30  | 00:31 | PASS 
2016-12-30 | 2017-01-04 | 01:30  | 01:31 | OVERLAP 
2016-12-30 | 2016-12-30 | 00:30  | 00:31 | PASS 

すべての条件を満たすクエリを作成できませんでした。 dbでレコードが重複していないかどうかを確認するためのクエリを手伝ってください。入力は$ start_date、$ end_date、$ start_time、$ end_timeです。

+1

が鳴ります。あなたもそれを共有するかもしれません。 – GolezTrol

答えて

1

私はこのクエリを作成しました。 Plsはより多くの値でそれをチェックします。私はMSSQLでやったが、Mysqlでも同じでなければならない。 Plsは私に任意の質問のために連絡します。

SELECT A.ID, A.START_DATE, A.END_DATE, A.START_TIME, A.END_TIME 
, CASE WHEN B.START_DATE IS NULL THEN 'PASS' ELSE 'OVERLAP' END AS CHK 
, B.START_DATE,B.END_DATE, B.START_TIME, B.END_TIME 
FROM NEW_RECORDS A 
LEFT JOIN EXISTING_RECORDS B ON A.START_DATE <=B.END_DATE 
    AND A.END_DATE>=B.START_DATE 
    AND A.START_TIME<=B.END_TIME 
    AND A.END_TIME>=B.START_TIME 

出力:クエリsatifies大部分または少なくともいくつかの条件を持っているよう

+--------+-------------------------+-------------------------+------------------+------------------+---------+ 
|  ID |  START_DATE  |  END_DATE   | START_TIME |  END_TIME  | CHK | 
+--------+-------------------------+-------------------------+------------------+------------------+---------+ 
|  1 | 2017-01-01 00:00:00.000 | 2017-01-01 00:00:00.000 | 01:30:00.0000000 | 01:31:00.0000000 | OVERLAP | 
|  2 | 2017-01-02 00:00:00.000 | 2017-01-02 00:00:00.000 | 01:30:00.0000000 | 01:31:00.0000000 | OVERLAP | 
|  3 | 2017-01-01 00:00:00.000 | 2017-01-02 00:00:00.000 | 01:30:00.0000000 | 01:31:00.0000000 | OVERLAP | 
|  4 | 2017-01-01 00:00:00.000 | 2017-01-02 00:00:00.000 | 00:30:00.0000000 | 00:31:00.0000000 | PASS | 
|  5 | 2017-01-03 00:00:00.000 | 2017-01-03 00:00:00.000 | 00:30:00.0000000 | 00:31:00.0000000 | PASS | 
|  6 | 2016-12-30 00:00:00.000 | 2017-01-04 00:00:00.000 | 01:30:00.0000000 | 01:31:00.0000000 | OVERLAP | 
|  7 | 2016-12-30 00:00:00.000 | 2016-12-30 00:00:00.000 | 00:30:00.0000000 | 00:31:00.0000000 | PASS | 
+--------+-------------------------+-------------------------+------------------+------------------+---------+ 
関連する問題