2017-01-25 5 views
0

私の問題を説明する最善の方法は正確にはわかりません。 私は複数のuser_idの任意のinvoice_noに関連付けられているがなくても、私のクエリをフィルタリングできるようにする必要があり、この重複したフィルタを適用するMySQL

+---------+------------+---------------+--+ 
| 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が1つのみであればOKです。

私がしようとしているのは、請求書の時間の大部分を持つユーザーの行のみを保持することです。

+3

希望する結果を追加してください。 – McNets

+1

'GROUP BY user_id'? –

+0

* "私がしようとしているのは、大半の時間を持つユーザーの行のみを請求書に保存することです。" * - SUMを計算してMAXを取得する必要があります。 –

答えて

0

はこれを試してみてください:

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) 

それはthを得るe invoiced_hrsの最大部分を持つinvoice_noのuser_id。

両方のユーザーが均等に寄与した場合は、両方のユーザーを返します。

+0

これは完璧に動作しました!ありがとうございました!請求書ごとに最大請求金額を返すようにすればどうなりますか? – nadleeh

0

あなたはこのような何かを行うことができます。

SELECT * 
FROM table t 
WHERE t.user_id = (SELECT t2.user_id 
       FROM table t2 
       GROUP BY t2.user_id 
       ORDER BY SUM(t2.invoiced_hrs) DESC 
       LIMIT 1) 

これは請求より多くの時間を持つユーザーのすべての行を取得します。だろう、あなたの例では :

| 4 | 1085 | 6.7654  | | 
| 4 | 1085 | 7.5435  | | 

内側のクエリがこれを返すことに注意してください:

| 4 | 14.3089 | | 
+0

これは私が必要とするものです!しかし、何らかの理由で、私は限界近くに構文エラーを取得しています。 – nadleeh

+0

@nadleeh間違った答えが必要な場合は、まさにあなたが必要とするものです。 – GurV

+0

@ GurV私は出力が私が必要としていたものであることを意味しました。 – nadleeh

関連する問題