輸送業界では、規制によりサービス時間が制限されます。開始および終了フィールドを含む連続したdatetimeレコードを検索するmysqlクエリ
IはTask_ID
呼ばAUTO_INCREMENTフィールド、User_ID
と呼ばれる外部キーを有する整数フィールド、および2つの日時フィールド、Start_DT
、及びEnd_DT
有するテーブルを含むMySQLデータベースを持っています。
表:複数のタスクを含めることができ
Task_ID | User_ID | Start_DT | End_DT
従業員のシフトは、各レコードを作成します。
従業員(User_ID
)によって最新のエンドタイムを識別するクエリが既にあります。 (htmlユーザーインターフェースは、開始時刻が終了時刻より遅いデータ入力を防ぎます。)
(従業員によって)最新のエンドタイムに隣接するすべてのレコードを返すクエリを作成する必要があります。つまり、現在のレコードの開始時刻が前のレコードの終了時刻(従業員別)と等しいすべてのレコード。一連のタスク(レコード)の数はさまざまです。
連続する一連のタスクがタスクの数を超えないように十分なサブクエリをネストする必要がありますか、ギャップを探してそのギャップより後ですべてのレコードを返す方法がありますか?
単一のフィールドにギャップを見つけるためのアドバイスがたくさんありますが、私の検索ではこの質問にはあまり適していません。
(:)
1以下のイチゴのコメントへの対応)
CREATE TABLE `hoursofservice` (
`Task_ID` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
`User_ID` SMALLINT(5) UNSIGNED NOT NULL,
`Location` VARCHAR(20) NULL DEFAULT NULL,
`Task` VARCHAR(30) NULL DEFAULT NULL,
`Start_DT` DATETIME NOT NULL,
`End_DT` DATETIME NULL DEFAULT NULL,
`Comment_1` VARCHAR(20) NULL DEFAULT NULL,
`Comment_2` VARCHAR(256) NULL DEFAULT NULL,
`Bad_Data` BIT(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (`Task_ID`),
UNIQUE INDEX `Task_ID` (`Task_ID`),
INDEX `FK_hoursofservice_employee_id` (`User_ID`),
CONSTRAINT `FK_hoursofservice_employee_id` FOREIGN KEY (`User_ID`) REFERENCES `employee_id` (`User_ID`) ON UPDATE CASCADE
と...
INSERT INTO hoursofservice (User_ID, Location, Task, Start_DT, End_DT, Comment_1, Comment_2)
SELECT User_ID, Location, Task, Start_DT, End_DT, Comment_1, Comment_2 FROM read_text_file;
2)結果セットは、そのテーブルから選択されたレコードになります最新のレコードからの開始時刻は前の時刻からの終了時刻と同じになり、同様に条件を満たすレコードがなくなるまで続きます。 (これらは、USER_IDが発注されます。)このような
あなたが好きな場合は、アクションのこの単純な二段階のコース、次の考慮:あなたはまだ行っていない場合は1をしたがって、問題をより簡単に複製できるように、適切なCREATEおよびINSERT文(および/またはsqlfiddle)を提供してください。 2.まだ実行していない場合は、手順1で提供された情報に対応する結果セットを提供してください。 – Strawberry
コーチングに感謝します。私はプロトコルの初心者です。 – dirk
私たちに教えてください。私たちに見せてください! – Strawberry