[英]SQL Select earliest start DateTime and Latest end DateTime of each day
我有一個下表,用於跟蹤員工的每日入職情況。 員工一天可以有多個簽入和簽出。 有沒有一種顯示方式,使得每個記錄都有EmployeeID
以及每天的最早的CheckIn
和最晚的CheckOut
來匯總記錄。
CREATE TABLE IF NOT EXISTS `PhyMeS_schema`.`DailyEntry` (
`EmployeeID` VARCHAR(10) NOT NULL,
`CheckIn` DATETIME NOT NULL,
`CheckOut` DATETIME NULL,
PRIMARY KEY (`EmployeeID`, `CheckIn`),
CONSTRAINT `fk_dailyEntry_EmployeeID`
FOREIGN KEY (`EmployeeID`)
REFERENCES `PhyMeS_schema`.`Employee` (`EmployeeID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
您應該能夠對EmployeeID
和DATE(CheckIn)
使用簡單的GROUP BY
來做到這一點,如下所示:
SELECT
EmployeeID
, DATE(CheckIn) AS the_date
, MIN(CheckIn) AS min_checkin
, MAX(CheckOut) AS max_checkout
FROM DailyEntry
GROUP BY EmployeeID, DATE(CheckIn)
注意:此查詢假定所有簽出均與相應的簽入在同一天進行。 換句話說,午夜沒人在里面。 如果您需要處理夜班,查詢將變得更加復雜:
SELECT EmployeeID, the_date, MIN(min_checkin), MAX(max_checkout)
FROM (
SELECT EmployeeID, DATE(CheckIn) AS the_date, MIN(CheckIn) AS min_checkin, null as max_checkout
FROM DailyEntry
GROUP BY EmployeeID, DATE(CheckIn)
UNION ALL
SELECT EmployeeID, DATE(CheckOut) AS the_date, null AS min_checkin, MAX(CheckOut) as max_checkout
FROM DailyEntry
GROUP BY EmployeeID, DATE(CheckOut)
) GROUP BY EmployeeID, the_date
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.