簡體   English   中英

比較mysql中同一列中的兩個日期

[英]compare two dates in same column in mysql

我們有包含三列員工 id、TimeIn 和自動增量 id 的生物識別數據。 我們必須找出員工的工作時間,但員工可能一天進出兩三次。 如何找出他進出的時間。 沒有列我們說進進出出。 我們還做了 max(TimeIn) 和 min(TimeIn) 的區別。 但在我們的情況下,這是不可能的,因為員工在一天中的任何時間進出很多次。

   13   2017-10-31 23:15:11 1   255 1   0
   13   2017-10-31 23:15:27 1   255 1   0
    3   2017-11-01 05:54:06 1   255 1   0
    2   2017-11-01 05:54:31 1   255 1   0
   11   2017-11-01 05:55:58 1   255 1   0
    1   2017-11-01 05:56:24 1   255 1   0
   14   2017-11-01 06:02:23 1   255 1   0
    8   2017-11-01 07:54:24 1   255 1   0
    8   2017-11-01 07:54:27 1   255 1   0
    7   2017-11-01 08:06:37 1   255 1   0
   13   2017-11-01 08:29:52 1   255 1   0
   10   2017-11-01 09:54:41 1   255 1   0
   15   2017-11-01 10:44:17 1   255 1   0
    4   2017-11-01 11:00:28 1   255 1   0
   14   2017-11-01 11:00:59 1   255 1   0
    5   2017-11-01 11:24:50 1   255 1   0
    9   2017-11-01 12:46:32 1   255 1   0
    6   2017-11-01 12:58:24 1   255 1   0
   11   2017-11-01 13:00:18 1   255 1   0
    1   2017-11-01 13:00:28 1   255 1   0
    2   2017-11-01 16:06:14 1   255 1   0
    2   2017-11-01 16:06:24 1   255 1   0
SELECT SUM(HOUR(TimeIn))  FROM table_biometric  group by DATE(TimeIn),Employee_id 

使用該查詢,您將獲得每位員工每天工作的總小時數

如果你想通過一個函數來總結全天的小時數,你可以

最后你可以使用 datetime 函數來獲得其他幫助

https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html

好吧,我不知道你的表格列。 describe your_table_name查詢的結果會很好。

但是您可以根據需要調整此查詢:

SELECT
  TIME_FORMAT(SEC_TO_TIME(sum(TIME_TO_SEC(t1.your_datetime_column_name))), "%h:%i") AS diff

from table t1
LEFT join table t2
on  t1.primary_key_column_name != t2.primary_key_column_name
  WHERE t1.primary_key_column_name IS NOT NULL

按照沒有輸入和輸出,您只能假設第一個輸入為 IN,而接下來為輸出。

您可以將內連接到下一個值以獲得時間差異,而不是僅過濾奇數值(偶數將超時)

select a.row, a.empid, timestampdiff(second,a.timein, ifnull(b.timeout,date_add(date(a.timein) , interval 1 day))) timeinsec from 
(SELECT  @row_num := IF(@prev_value=o.empid,@row_num+1,1) AS Row,
    empid ,timein,       
   @prev_value := o.empid
FROM Table1 o,
  (SELECT @row_num := 1) x,
  (SELECT @prev_value := '') y
 ORDER BY o.empid,timein asc
 ) a 

 join

 (SELECT  @row_num := IF(@prev_value2=o.empid,@row_num+1,1) AS Row,
    empid ,timein as timeout,       
   @prev_value2 := o.empid
  FROM Table1 o,
  (SELECT @row_num := 1) x,
  (SELECT @prev_value2 := '') y
  ORDER BY o.empid,timein asc) b
 on a.empid=b.empid and a.row=b.row-1
 where mod(a.row,2)=1

編輯

  1. 日期差異更改為時間戳差異
  2. 處理空情況

暫無
暫無

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

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