我不确定如何最好地解释我的问题。
我有一张与此类似的桌子

+---------+------------+---------------+--+
| user_id | invoice_no |  invoiced_hrs |  |
+---------+------------+---------------+--+
|    1    |    1023    |    8.1234     |  |
|    2    |    1023    |    1.1234     |  |
|    1    |    1023    |    5.8765     |  |
|    4    |    1085    |    6.7654     |  |
|    4    |    1085    |    7.5435     |  |
|    6    |    1022    |    5.6789     |  |
+---------+------------+---------------+--+


我需要能够过滤查询,而不必将多个user_id与任何invoice_no关联。只要只有一个user_id与它关联,重复的发票号就可以。

我正在尝试做的是仅保留发票上大部分时间的用户行。

最佳答案

尝试这个:

select
    t.*
from your_table t
inner join (
    select
        invoice_no,
        user_id,
        sum(invoiced_hrs) invoiced_hrs
    from your_table
    group by invoice_no, user_id
) t1 on t.invoice_no = t1.invoice_no and t.user_id = t1.user_id
inner join (
    select
        invoice_no,
        max(invoiced_hrs) invoiced_hrs
    from (
        select
            invoice_no,
            user_id,
            sum(invoiced_hrs) invoiced_hrs
        from your_table
        group by invoice_no, user_id
    ) t group by invoice_no
) t2 on t1.invoice_no = t2.invoice_no and t1.invoiced_hrs = t2.invoiced_hrs;


产生:

+---------+------------+--------------+
| user_id | invoice_no | invoiced_hrs |
+---------+------------+--------------+
|       6 |       1022 |       5.6789 |
|       1 |       1023 |       8.1234 |
|       1 |       1023 |       5.8765 |
|       4 |       1085 |       6.7654 |
|       4 |       1085 |       7.5435 |
+---------+------------+--------------+
5 rows in set (0.04 sec)


它获得invoice_no的user_id,该ID在总invoiced_hrs中占最大比例。

请注意,如果他们做出了相等的贡献,它将返回两个用户。

关于mysql - 过滤重复的MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41858564/

10-14 15:07
查看更多