簡體   English   中英

Mysql-在30分鍾內按開始和結束時間分組

[英]Mysql - Group By start and end times within 30 minutes

我正在嘗試從我們的計時應用程序中總結員工的休假時間,並且如果開始時間和結束時間相同或在30分鍾內,則需要合並記錄。

這是我的數據:

First_Name    Start_Date             End_Date
EmployeeA     2015-07-23 08:00:00    2015-07-23 16:30:00
EmployeeB     2015-07-23 12:00:00    2015-07-23 08:00:00
EmployeeC     2015-08-20 08:00:00    2015-08-20 10:15:00
EmployeeC     2015-08-20 10:15:00    2015-08-20 12:00:00
EmployeeC     2015-08-20 12:30:00    2015-08-20 16:30:00
EmployeeD     2015-08-22 08:00:00    2015-08-22 10:15:00
EmployeeD     2015-08-22 16:00:00    2015-08-22 16:30:00

在上面的示例中,我希望我的輸出看起來像是:

First_Name    Start_Date             End_Date
EmployeeA     2015-07-23 08:00:00    2015-07-23 16:30:00
EmployeeB     2015-07-23 12:00:00    2015-07-23 08:00:00
EmployeeC     2015-08-20 08:00:00    2015-08-20 16:30:00
EmployeeD     2015-08-22 08:00:00    2015-08-22 09:00:00
EmployeeD     2015-08-22 16:00:00    2015-08-22 16:30:00

基本上,任何結束時間在30分鍾以內或等於同一員工的另一條記錄的開始時間的記錄都應分組。

到目前為止,我是一個分組依據,如果在24小時內沒有時間,則合並記錄,但是這將合並我的EmployeeD示例中的記錄,這不是我的意圖。

select a.first_name, start_date, max(end_date)
from timeoff
group by unix_timestamp(start_date) DIV 17200, first_name

我認為我需要按功能分組使用開始時間和結束時間,但是在確定如何使用時需要幫助。

謝謝你的協助。

抱歉,但這不是按指令分組的目的。 我建議您在與mysql一起使用的任何語言上執行此操作。

如果必須在mysql上執行此操作,那么想到的解決方案將需要進行一些更改:

  • 建立觸發器生成的id的另一列,然后shift_id分組,我們將其shift_id
  • 該表上的觸發器與發布和更新事件相關聯,以檢查要發布/更新的行與同一員工的上次迭代之間的時間差,然后將shift_id設置為與上一個迭代或新的自動生成的相同。

這樣做比簡單地在應用程序代碼中查找需要更多的工作。

暫無
暫無

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

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