簡體   English   中英

MySQL GROUP BY MAX兩列

[英]MySQL GROUP BY MAX two columns

因此,我在數據庫中獲得了許多測試,每個測試都屬於一個類別,每個“組”的測試都有一個“序列號”(排序的時間戳)。 每個測試都有通過或失敗的結果,就像這樣:

TEST Table
TEST_ID     TEST_NAME    TEST_CAT    TEST_SN     RESULT
1           test_a       Basic       112233      Pass
2           test_b       Basic       112233      Pass
3           test_c       Basic       112233      Pass
4           test_d       Basic       112233      Fail
5           test_e       Basic       112233      Pass
6           test_a       Basic       223344      Fail
7           test_b       Basic       223344      Pass
8           test_c       Basic       223344      Pass
9           test_d       Basic       223344      Fail
10          test_w       Advacned    112233      Fail
11          test_x       Advacned    112233      Pass
12          test_y       Advacned    112233      Pass
13          test_z       Advacned    112233      Pass

我試圖制作一個查詢,以僅返回TEST_SN最高的每個類別的行。 因此,我試圖返回的結果如下所示:

TEST_ID     TEST_NAME    TEST_CAT    TEST_SN     RESULT
6           test_a       Basic       223344      Fail
7           test_b       Basic       223344      Pass
8           test_c       Basic       223344      Pass
9           test_d       Basic       223344      Fail
10          test_w       Advacned    112233      Fail
11          test_x       Advacned    112233      Pass
12          test_y       Advacned    112233      Pass
13          test_z       Advacned    112233      Pass

由於TEST_SN的“ Basic”有“ 112233”和“ 223344”,因此我想忽略早期(較小) TEST_SN (第1,2,3,4和5行)中的所有測試。 由於“ 112233”是Advacted的唯一TEST_SN ,因此我想保留所有這些行(10、11、12和13)。

我可以接近以下查詢:

SELECT
    t.test_id,
    t.test_name,
    t.test_cat,
    MAX(t.test_sn),
    t.result
FROM
    car_test t
GROUP BY
    t.test_name, t.test_cat

但是這就是我得到的:

TEST_ID     TEST_NAME   TEST_CAT    TEST_SN     RESULT
1           test_a      Basic       223344      Pass
2           test_b      Basic       223344      Pass
3           test_c      Basic       223344      Pass
4           test_d      Basic       223344      Fail
5           test_e      Basic       112233      Fail
10          test_w      Advanced    112233      Fail
11          test_x      Advanced    112233      Pass
12          test_y      Advanced    112233      Pass
13          test_z      Advanced    112233      Pass

第5行仍然存在。 我只想為每個TEST_CATSELECT具有MAX TEST_SN值的TEST_CAT

有任何想法嗎?

首先,我們編寫一個查詢,以獲取每個類別( test_cat )的最高(MAX) test_sn 像這樣:

 SELECT t.test_cat
      , MAX(t.test_sn)  AS max_test_sn
   FROM car_test t
  GROUP BY t.test_cat

然后,我們可以將該查詢用作另一個查詢的內聯視圖 (上面的查詢返回一個結果集。我們可以用它代替表名。)作為一個簡單的演示:

 SELECT s.test_cat
      , s.max_test_sn 
   FROM ( SELECT t.test_cat
               , MAX(t.test_sn)  AS max_test_sn
            FROM car_test t
           GROUP BY t.test_cat
           ORDER BY t.test_cat
        ) s
  ORDER BY s.test_cat

現在,我們可以將JOIN添加到原始表中,以僅檢索與內聯視圖查詢返回的行匹配的行。 例如:

 SELECT r.test_id
      , r.test_name
      , r.test_cat
      , r.test_sn
      , r.result
   FROM ( SELECT t.test_cat
               , MAX(t.test_sn)  AS max_test_sn
            FROM car_test t
           GROUP BY t.test_cat
           ORDER BY t.test_cat
        ) s
   JOIN car_test r
     ON r.test_cat = s.test_cat
    AND r.test_sn  = s.max_test_sn
  ORDER
     BY r.test_id

您不應在group by子句中使用test_name。 在放置test_name時,將為test-e和Basic創建一個有效的組,最大組為112233。您是否嘗試在group by子句中僅保留“ test_cat”?

暫無
暫無

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

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