簡體   English   中英

MySQL選擇兩列中唯一的行,其中一列中的值最高

[英]MySQL select unique rows in two columns with the highest value in one column

我有一個基本表:

+-----+--------+------+------+
| id, | name,  | cat, | time |
+-----+--------+------+------+
|   1 | jamie  |    1 |  100 |
|   2 | jamie  |    2 |  100 |
|   3 | jamie  |    1 |   50 |
|   4 | jamie  |    2 |  150 |
|   5 | bob    |    1 |  100 |
|   6 | tim    |    1 |  300 |
|   7 | alice  |    4 |  100 |
+-----+--------+------+------+

我嘗試使用此答案的“左連接,調整連接條件和過濾器”部分: SQL Select only rows with Max Value on a Column但由於某些原因,當存在值為 0 的記錄時,它會中斷,並且它也不會出於某種原因,不會返回每個唯一的答案。

在此表上進行查詢時,我希望收到以下值:

+-----+--------+------+------+
| id, | name,  | cat, | time |
+-----+--------+------+------+
|   1 | jamie  |    1 |  100 |
|   4 | jamie  |    2 |  150 |
|   5 | bob    |    1 |  100 |
|   6 | tim    |    1 |  300 |
|   7 | alice  |    4 |  100 |
+-----+--------+------+------+

因為它們在 name 和 cat 上是唯一的,並且具有最高的時間價值。

我從上面的答案改編的查詢是:

SELECT a.name, a.cat, a.id, a.time
FROM data A
INNER JOIN (
    SELECT name, cat, id, MAX(time) as time
    FROM data
    WHERE extra_column = 1
    GROUP BY name, cat
) b ON a.id = b.id AND a.time = b.time

這里的問題是每行 ID 是唯一的,您在獲取最大值時無法獲取唯一值; 您必須改為加入分組值。

SELECT a.name, a.cat, a.id, a.time
FROM data A
INNER JOIN (
    SELECT name, cat, MAX(time) as time
    FROM data
    WHERE extra_column = 1
    GROUP BY name, cat
) b ON A.Cat = B.cat and A.Name = B.Name AND a.time = b.time

想一想...那么,mySQL 從 Inline 視圖返回的 ID 是什么? 傑米可能是 1 或 3 和 2 或 4。 引擎如何知道選擇具有最大 ID 的那個? 它“可以自由地從每個組中選擇任何值,因此除非它們相同,否則選擇的值是不確定的。”它可能會選擇錯誤的值,從而導致錯誤的結果。 所以你不能用它來加入。

https://dev.mysql.com/doc/refman/5.0/en/group-by-handling.html

如果要使用自聯接,可以使用以下查詢:

SELECT
  d1.*
FROM
  date d1 LEFT JOIN date d2
  ON d1.name=d2.name
     AND d1.cat=d2.cat
     AND d1.time<d2.time
WHERE
  d2.time IS NULL

這很簡單

SELECT MAX(TIME),name,cat FROM table name group by cat

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM