我希望我可以向您展示我的完整Oracle SQL查询,但我不能......但是它设置了这样的东西
SELECT
TABLE1.TEST
TABLE2.SUB_TEST
TABLE3.RUN_NAME
FROM
TABLE1
TABLE2
TABLE3
TABLE4
WHERE
*just some LIKE statements to search for what i want*
无论如何,让我们说它会返回这样的东西。
TEST SUB_TEST RUN_NAME
TEST1 SUBTEST1 49_4021
TEST1 SUBTEST2 49_4021
TEST1 SUBTEST1 49_4033
TEST1 SUBTEST2 49_4033
TEST2 SUBTEST1 50_2122
TEST2 SUBTEST2 50_2122
每个TEST都有两个或更多SUBTEST。每次运行TEST时,它都会创建一个RUN_NAME,这是一个增加未知数量的数字。每次运行TEST时,每个SUBTEST都有相同的RUN_NAME。
我的问题,在这个例子中,TEST1运行两次,我想知道,我怎么能这样做它只返回到更大的RUN_NAME的结果。注意,我仍然希望它与TEST1一起返回TEST2,但我只想返回TEST1的较大RUN_NAME的结果。
答案 0 :(得分:1)
听起来你想要MAX(RUN_NAME)
给我:
SELECT TEST, SUB_TEST, MAX(RUN_NAME) as RUN_NAME
FROM yourTables
WHERE yourConditions
GROUP BY TEST, SUB_TEST
这将输出:
TEST SUB_TEST RUN_NAME
TEST1 SUBTEST1 49_4033
TEST1 SUBTEST2 49_4033
TEST2 SUBTEST1 50_2122
TEST2 SUBTEST2 50_2122
实际上,如果SUBTESTS
不同且没有分组,您需要DENSE_RANK()
:
SELECT *
FROM (SELECT TEST, SUB_TEST, RUN_NAME,
DENSE_RANK() OVER (PARTITION BY TEST, SUB_TEST ORDER BY RUN_NAME DESC) RN
FROM yourTables
WHERE yourConditions) A
WHERE RN = 1