簡體   English   中英

SQL GROUP BY和MAX

[英]SQL GROUP BY AND MAX


我的數據庫中有下表:

-------------------------------------------
| value  | category |         date        |
-------------------------------------------
| 12.2   | A        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 13.3   | A        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 11.0   | B        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 11.2   | C        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 19.2   | C        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 10.4   | C        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------

我正在嘗試獲取最大值(12.2,13.3,..)和與每個Category(A,B,C)的該值相對應的日期。

例如:

-------------------------------------------
| value  | category |         date        |
-------------------------------------------
| 13.3   | A        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 11.0   | B        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 19.2   | C        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------

我遵循此鏈接SQL:如何每天為每個組選擇最大值?

所以我做了這個查詢:

SELECT MAX(value), category, date FROM myTable GROUP BY category;

但是由於某種原因,我不知道為什么它沒有給我我想要的東西,它給了我錯誤的DATE值(DATE不對應於Max(value))!

您可以使用sub qyery進行此操作。

SELECT MAX(t.value), 
    t.category,
    (SELECT m.date FROM myTable as m 
     WHERE m.value = MAX(t.value) AND m.category = t.category) as Category
FROM myTable as t
GROUP BY category;

但是由於某種原因,我不知道為什么它沒有給我我想要的東西,它給了我一個錯誤的值

在這種情況下,它沒有為您提供正確值的原因:

SELECT MAX(value), category, date FROM myTable GROUP BY category;

就是說,當您在mysql的select子句中包含不包含在group by或類似date的聚合函數時,mysql會為其選擇一個任意值,這樣它會為您提供錯誤的值,而不是對應的值達到最大值。


我正在嘗試獲取最大值(12.2,13.3,..)和每個Category(A,B,C)的該值相對應的日期

要獲取與MAX(value)相對應的date ,請嘗試以下方法:

SELECT t1.*
FROM myTable AS t1
INNER JOIN
(
  SELECT MAX(value) AS MaxV, category
  FROM myTable AS t1
  GROUP BY category
) AS t2 ON  t2.MaxV     = t1.value
        AND t1.Category = t2.category;

子查詢的聯接將確保返回的日期值與Max(value)相對應,並將消除其他值。

暫無
暫無

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

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