2016-04-28 107 views
1

你好傢伙我需要這個功能的幫助,我使用MySQL數據庫服務器 版本:5.5.47-0ubuntu0.14.04.1 - (Ubuntu)。日誌與日誌的區別

我希望能夠得到一個工人被聘用多少個「周」。每當工作人員的狀態發生變化時,我都有一個存儲日誌數據的表。

logid workerid statusid  timestamp 
1000 10   1(available) 2016-04-10 
1001 10   2(Hired)  2016-04-24 

我想擁有的是: 花了工人10兩個星期獲得聘用。

我已經看過DATEDIFF(first date, second date)函數,但我必須使用兩個不同的where條件爲每個日期,我不知道該怎麼做?

+0

所以你需要狀態1和2%之間workerid DATEDIFF? – mitkosoft

回答

0

你需要加入同一個表,並使用DATEDIFF()

SELECT 
    e1.workerid, 
    DATEDIFF(e2.`timestamp`, e1.`timestamp`) daysDiff, 
    ROUND(DATEDIFF(e2.`timestamp`, e1.`timestamp`)/7, 0) weeksDiff 
FROM 
    employees e1 
    INNER JOIN employees e2 ON e1.workerid = e2.workerid 
WHERE 
    e1.statusid = 1 
    AND e2.statusid = 2 

輸出:

+----------+----------+-----------+ 
| workerid | daysDiff | weeksDiff | 
+----------+----------+-----------+ 
|  10 |  14 |   2 | 
+----------+----------+-----------+ 
1 row in set 
+0

非常感謝我的男人,這是完美的作品。我會試着瞭解這個內部連接是如何工作的。 –

+0

太棒了!標記答案爲了關閉這個話題。 – mitkosoft

+0

如果我需要鏈接更多的表鍵鏈接到哪裏條件,這將如何完成'INNER JOIN'。我應該添加更多'INNER JOIN'語句,還是應該將它們添加到where子句中? –