2013-07-02 31 views
1

對不起,標題混亂。我一直在苦苦尋找這個查詢很長一段時間,我會盡我所能解釋我在找什麼。MYSQL - 顯示總work_time的總數,但只顯示最近一次更新的日期結果date_time

我有3張桌子,我正試圖拉。我們會打電話給他們:

headers 
details 
users 

標頭表包含兩個重要的領域:

ref_num 
headers_uid 

詳細資料表格有以下重要行:

details_uid 
headers_uid 
work_time 
user_uid 
disposition 
date_time 

用戶表有以下幾點:

user_uid 
username 

一種包含了大多數的,我需要的細節信息表的示例如下:

details_uid | headers_uid | work_time | user_uid | disposition | date_time 
      1 |   10 |  25:00 |  5 |   o | 2013-07-02 12:14:48 
      2 |   10 |  10:00 |  7 |   p | 2013-07-02 13:55:37 
      3 |   10 |  5:00 |  5 |   c | 2013-07-02 15:04:28 
      4 |   12 |  7:00 |  5 |   o | 2013-07-02 15:20:21 
      5 |   12 |  12:00 |  7 |   p | 2013-07-02 15:35:27 
      6 |   12 |  3:00 |  7 |   c | 2013-07-02 15:40:19 

我想要做的是顯示headers.refnum,總work_time的總和爲獨特的用戶所有details.details_uids具有相同的details.headers_uid,只有最後一次處理每個用戶的details.headers_uid。結果必須尋找一個特定的date_time(我通常通過> CURDATE()來搜索今天的事件)。另外,我不會顯示user_uid,而是通過users.username在WHERE子句中搜索(我的用戶名存儲在txt文件變成了一個IN語句)。

理想的情況下,這是我想看到的內容:

ref_num | work_time | username | disposition | 
    A10 |  30:00 |  mike |   c | 
    A10 |  10:00 | james |   p | 
    A12 |  7:00 |  mike |   o | 
    A12 |  15:00 | james |   c | 

任何幫助,不勝感激!我知道這可能會涉及大量的連接語句和子查詢,我一直在桌子上敲我的頭,試圖讓它正確。我知道這將使用PHP容易得多,但可悲的是,我沒有在工作PHP訪問,但(不要問..)

回答

1

我想這你想要做什麼:

select h.ref_num, sum(d.work_time), u.username, d.disposition 
from details d join 
    headers h 
    on d.headers_uid = h.headers_uid join 
    users u 
    on d.user_uid = u.user_uid 
where d.disposition = (select disposition 
         from details d2 
         where d2.headers_uid = d.headers_uid and 
          d2.users_uid = d.users_uid 
         order by date_time desc 
         limit 1 
        )  
group by h.ref_num, u.username, d.disposition; 

關鍵是where子句爲給定的一組詳細記錄選擇最後的disposition

+0

非常好!它看起來運行良好。謝謝你一百遍,男人!這讓我一陣沮喪。我從來沒有想過在where子句中尋找處置。我的查詢之前有大約3個子查詢和很多連接.. –