需要帮助过滤掉Oracle结果

时间:2018-04-11 18:32:53

标签: sql oracle

我希望我可以向您展示我的完整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的结果。

1 个答案:

答案 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