【问题标题】:MYSQL - Show sum of total work_time but only display results from last updated date_timeMYSQL - 显示总工作时间的总和,但仅显示上次更新日期时间的结果
【发布时间】:2013-06-30 08:44:33
【问题描述】:

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

我要从中提取 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 的唯一用户的总工作时间总和具有相同的 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 访问权限(不要问..)

【问题讨论】:

    标签: mysql select join sum subquery


    【解决方案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

    【讨论】:

    • 非常好!看起来它运作良好。谢谢你一百遍,伙计!这让我沮丧了一段时间。我从没想过在 where 子句中寻找处置。我之前的查询有大约 3 个子查询和很多连接..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多