簡體   English   中英

MySQL 14天重置查詢

[英]MySQL 14 day reset query

我正在建立一個基本系統,該系統隨機選擇2名員工來支持一天的業務。 我真的在數據庫上苦苦掙扎,實際上我將如何完成該任務,因為他們列出了某些使其變得非常棘手的規則。

商業規則:

  • 工程師一天最多只能輪班半天。

  • 工程師不能連續兩天輪班。

  • 每個工程師應在任何兩周的時間內完成一整天的支持。

我是一個真正的初學者,但是到目前為止,這是我對問題的看法:

兩張桌子:

雇員:

employee_id (pk)
first_name
last_name

轉變:

shift_id (pk)
employee_id (fk)
shift_hours

樣本數據:

 1. shift_id = 1, employee_id = 1, shift_hours = 4
 2. shift_id = 2, employee_id = 2, shift_hours = 6

 1. employee_id = 1, first_name = steve, second_name = jones
 2. employee_id = 2, first_name = rob, second_name = helen

我的問題如下:根據上面的數據,我可以查詢什么以確保僅從數據庫中挑選過去14天內工作少於8小時的用戶(如何處理這14天的問題) ,有人打8 8小時標記后24小時會發生某種“重置”嗎?)

希望我的問題很清楚,我還是個初學者,對此我深表歉意。

提前致謝

(這與我之前的問題有所不同,請看底部,我只是復制了問題的解釋)

第一件事,我不一定會做shift_hours我會做這樣started_atended_at ,使他們datetime列。 這樣,您可以在查詢中進行日期數學運算以得出工作時間,並且可以在特定日期之間進行選擇。

以此為前提,表格可能如下所示:

CREATE TABLE `employee` (
  id INTEGER AUTO_INCREMENT NOT NULL,
  first_name VARCHAR(32) NOT NULL,
  last_name VARCHAR(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB;

CREATE TABLE `shift` (
  id INTEGER AUTO_INCREMENT NOT NULL,
  started_at DATETIME NOT NULL,
  ended_at DATETIME NOT NULL,
  employee_id INTEGER,
  PRIMARY KEY (`id`),
  KEY `shift_employee_id` (`employee_id`),
  FOREIGN KEY `shift_employee_id_fk_employee_id` (`employee_id`)
    REFERENCES `employee` (`id`)
    ON DELETE CASCADE
) ENGINE=INNODB;

所以現在我們可以像這樣查詢:

SELECT e.first_name, e.last_name, SUM(ABS(TIMESTAMPDIFF(HOUR, s.started_at, s.ended_at))) as shift_hours
FROM employee e, shift s
WHERE e.id = s.employee_id
AND s.started_at BETWEEN '2018-01-01' AND '2018-01-15'
GROUP BY e.id
HAVING shift_hours < 8;

這將只給我們在給定日期之間記錄少於8小時的員工。

SQL小提琴: http ://sqlfiddle.com/#!9 / 280d88 / 6 (請注意,我不想生成足夠的數據來使用您的14天規則,但您應該明白這一點)。

其他規則是您在分配班次時希望在代碼邏輯中應用的規則。 盡管您可能可以在存儲過程中做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM