对于令人困惑的标题感到抱歉。我一直在努力解决这个问题很长一段时间,我会尽力解释我在寻找什么。
我有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(不要问...)
答案 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
。