MYSQL - 显示总工作时间的总和,但仅显示上次更新的date_time的结果

时间:2013-07-02 20:01:40

标签: mysql select join sum subquery

对于令人困惑的标题感到抱歉。我一直在努力解决这个问题很长一段时间,我会尽力解释我在寻找什么。

我有3张桌子,我试图从中拉出来。我们会打电话给他们:

headers
details
users

标题表包含两个重要字段:

ref_num
headers_uid

详细信息表格包含以下重要行:

details_uid
headers_uid
work_time
user_uid
disposition
date_time

users表具有以下内容:

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,所有details.details_uids的唯一用户的total work_time总和,具有相同的details.headers_uid,并且只显示每个用户的details.headers_uid的最后处置。结果必须查找特定的date_time(我通常按> CURDATE()搜索以获取今天的事件)此外,我将在users.username中搜索WHERE子句而不是显示user_uid(我将用户名存储在一个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 个答案:

答案 0 :(得分: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