我在表中有上述数据,我想要 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
我想要
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