所以我在数据库中进行了多次测试,每个测试属于一个类别,每个测试的“组”都有 “序列号”(各种时间戳)。每个测试都有一个通过或失败的结果,如下所示:
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
s“112233”和“223344”,我想忽略之前的所有测试
(较小)TEST_SN
(第1,2,3,4和5行)。由于“112233”是Advacned的唯一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行仍然存在。我想SELECT
仅MAX
TEST_SN
TEST_CAT
值的行template
任何想法?
答案 0 :(得分:1)
首先,我们编写一个查询,为每个类别(test_sn
)获取最高(MAX)test_cat
。像这样:
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
答案 1 :(得分:0)
您不应在group by子句中使用test_name。在放置test_name时,test-e& amp;最大值为112233的基本值。您是否尝试仅保留" test_cat"在你的group by子句中?