2014-07-12 101 views
-1

我想我需要一點幫助,這個...這是一個時鐘。行需要轉換爲每天的列。下面是一個示例表格以及我試圖獲得的結果。Mysql - 行日期列

需要考慮的其他問題:
- 有時候人們會忘記註銷。
- 有時,人們可以計時進出多次在同一天

這裏是我的表: 表A

+-------+-----------+-----------------------+---------+ 
| ID | User_id | DateTime   | inorout | 
+-------+-----------+-----------------------+---------+ 
| 1  | 5  | 2014-07-10 12:50:00 | 1  | 
| 2  | 5  | 2014-07-10 17:40:00 | 0  | 
| 3  | 5  | 2014-07-11 01:40:00 | 1  | 
| 4  | 5  | 2014-07-11 02:50:00 | 0  | 
| 5  | 5  | 2014-07-12 03:20:00 | 1  | 
+-------+-----------+-----------------------+---------+ 

1表示在,0表示出

這是我試圖得到的結果: - User_id 5的結果

ID In      Out      Hours worked 
1 2014-07-10 12:50:00  2014-07-10 17:55:00  5:05 
2 2014-07-11 01:40:00  2014-07-11 02:50:00  1:10 
3 2014-07-12 03:20:00  NULL     NULL 

謝謝!

+0

什麼是你的排隊? – Cheruvian

+0

你需要什麼幫助?你沒有顯示任何代碼。 –

+0

我的問題是我有一張桌子,我試圖得到那個結果。我沒有發佈任何代碼,因爲幾個小時後我還沒有取得任何進展。 –

回答

0

我相信這會做你正在尋找的技巧......基本上你想在桌子上使用一個樞軸,但有一種方法可以實現這一點,而不需要真正做一個關鍵點!這樣.....

SELECT 
    id, 
    Login, 
    Logout, 
    TIMESTAMPDIFF(MINUTE, Login, Logout)/60 as 'Hours Worked' 
FROM(
    SELECT id, 
     MAX(IF(inorout = 1, DateTime, NULL)) AS Login, 
     MAX(IF(inorout = 0, DateTime, NULL)) AS Logout 
    FROM table_name 
    GROUP BY DATE(DateTime) 
) AS temp; 

SEE FIDDLE: 使用該日MAX()聚集是模擬你的桌子上樞軸,以兩行(登錄和註銷)轉成兩列的方式。希望有所幫助! :)

編輯: 你的數據不符合預期的結果...即 LOGIN 2014年7月10日12時50分00秒和退出2014年7月10日17:40:00。該第10個登出時間不是您爲預期結果發佈的內容......但是,此查詢完成了您想要的內容。