1

抱歉标题令人困惑。我已经为这个查询苦苦挣扎了很长时间,我会尽力解释我在寻找什么。

我有 3 张桌子要从中拉出。我们称它们为:

headers
details
users

headers 表包含两个重要字段:

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,所有 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 访问权限(不要问..)

4

1 回答 1

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

于 2013-07-02T20:35:49.113 回答