在ORACLE中获取两种不同条件下的数据

问题描述 投票:0回答:1

我在表中有上述数据,我想要 RECIVER_ROLE_ID B 的数据,其中 ACTION_STATUS=1(ACTION_STATUS 包含最新的 UPDATED_ON 值)。

我的要求如下- 下面是我想要实现的查询。

SELECT
        "NOTIFICATION_DETAILS_ID",
        "RECIEVER_ROLE_ID",
        "RECIEVER_ID",
        "STATE_ID",
        "DISTRICT_ID",
        "ACTION_STATUS",
        "IS_AVAILABLE",
        "CREATED_AT",
        "UPDATED_AT",
        "CREATED_YEAR",
        "NOTIFICATION_ID",
        ROW_NUMBER() OVER (PARTITION BY "RECIEVER_ID" ORDER BY "UPDATED_AT" DESC) as R
    FROM
        "TRANSACTIONAL"."TBL_EVENT_NOTIFICATION_DETAILS"
    WHERE
        (("RECIEVER_ID" =0)
            OR ("RECIEVER_ID" =593728771))
        AND ("RECIEVER_ROLE_ID" ='B')
        AND ("IS_AVAILABLE" =1)
        AND "STATE_ID" =24
        AND "DISTRICT_ID" =491
        AND NOTIFICATION_ID =4426
sql oracle
1个回答
0
投票

我想要

RECIVER_ROLE_ID
B
ACTION_STATUS=1

的数据

添加过滤器:

SELECT NOTIFICATION_DETAILS_ID,
       RECIEVER_ROLE_ID,
       RECIEVER_ID,
       STATE_ID,
       DISTRICT_ID,
       ACTION_STATUS,
       IS_AVAILABLE,
       CREATED_AT,
       UPDATED_AT,
       CREATED_YEAR,
       NOTIFICATION_ID,
       ROW_NUMBER() OVER (PARTITION BY RECIEVER_ID ORDER BY UPDATED_AT DESC)
         as R
FROM   TRANSACTIONAL.TBL_EVENT_NOTIFICATION_DETAILS
WHERE  RECIEVER_ID      IN (0, 593728771)
AND    RECIEVER_ROLE_ID ='B'
AND    ACTION_STATUS    = 1
AND    IS_AVAILABLE     = 1
AND    STATE_ID         = 24
AND    DISTRICT_ID      = 491
AND    NOTIFICATION_ID  = 4426

对于您的示例数据,这将返回零行,因为没有行具有

RECIEVER_ROLE_ID=B AND ACTION_STATUS=1

相反,如果您想要最低的

ACTION_STATUS
,其中
RECIEVER_ROLE_ID=B
,则使用内联视图:

SELECT *
FROM   (
  SELECT NOTIFICATION_DETAILS_ID,
         RECIEVER_ROLE_ID,
         RECIEVER_ID,
         STATE_ID,
         DISTRICT_ID,
         ACTION_STATUS,
         IS_AVAILABLE,
         CREATED_AT,
         UPDATED_AT,
         CREATED_YEAR,
         NOTIFICATION_ID,
         ROW_NUMBER() OVER (PARTITION BY RECIEVER_ID ORDER BY UPDATED_AT DESC)
           as R,
         ROW_NUMBER() OVER (PARTITION BY RECIEVER_ID ORDER BY ACTION_STATUS)
           AS as_rn
  FROM   TRANSACTIONAL.TBL_EVENT_NOTIFICATION_DETAILS
  WHERE  RECIEVER_ID      IN (0, 593728771)
  AND    RECIEVER_ROLE_ID ='B'
  AND    IS_AVAILABLE     = 1
  AND    STATE_ID         = 24
  AND    DISTRICT_ID      = 491
  AND    NOTIFICATION_ID  = 4426
)
WHERE  as_rn = 1
© www.soinside.com 2019 - 2024. All rights reserved.