根据两列重复值找出唯一的最高记录
Find out unique top record based on two columns duplicate value
下面是一些数据
现在我只想检索那些具有唯一 current_position_latitude 和 current_position_longitude 的记录以及使用 sys_movement_evt_id 的排序依据的最高记录。那低于我要求的输出。
我当前的查询是
select
CURRENT_POSITION_LATITUDE,
CURRENT_POSITION_LONGITUDE,
SYS_EVT_TARGET_ID,
SYS_MOVEMENT_EVT_ID
from TMS_MOVEMENT_EVT
where SYS_EVT_TARGET_ID = 10245 and
CURRENT_POSITION_LATITUDE is not null and CURRENT_POSITION_LATITUDE != 0 and
CURRENT_POSITION_LONGITUDE is not null and CURRENT_POSITION_LONGITUDE != 0
请告诉我怎样才能达到要求的输出。
您可以使用 RANK() 函数实现此目的
with CTE_DATA AS (
SELECT
CURRENT_POSITION_LATITUDE,
CURRENT_POSITION_LONGITUDE,
SYS_EVT_TARGET_ID,
SYS_MOVEMENT_EVT_ID
RANK() OVER(PARTION BY CURRENT_POSITION_LATITUDE,
CURRENT_POSITION_LONGITUDE
ORDER BY SYS_MOVEMENT_EVT_ID DESC) LAT_RANK
FROM TMS_MOVEMENT_EVT
)
SELECT
CURRENT_POSITION_LATITUDE,
CURRENT_POSITION_LONGITUDE,
SYS_EVT_TARGET_ID,
SYS_MOVEMENT_EVT_ID
FROM CTE_DATA
WHERE LAT_RANK = 1
下面是一些数据
现在我只想检索那些具有唯一 current_position_latitude 和 current_position_longitude 的记录以及使用 sys_movement_evt_id 的排序依据的最高记录。那低于我要求的输出。
我当前的查询是
select
CURRENT_POSITION_LATITUDE,
CURRENT_POSITION_LONGITUDE,
SYS_EVT_TARGET_ID,
SYS_MOVEMENT_EVT_ID
from TMS_MOVEMENT_EVT
where SYS_EVT_TARGET_ID = 10245 and
CURRENT_POSITION_LATITUDE is not null and CURRENT_POSITION_LATITUDE != 0 and
CURRENT_POSITION_LONGITUDE is not null and CURRENT_POSITION_LONGITUDE != 0
请告诉我怎样才能达到要求的输出。
您可以使用 RANK() 函数实现此目的
with CTE_DATA AS (
SELECT
CURRENT_POSITION_LATITUDE,
CURRENT_POSITION_LONGITUDE,
SYS_EVT_TARGET_ID,
SYS_MOVEMENT_EVT_ID
RANK() OVER(PARTION BY CURRENT_POSITION_LATITUDE,
CURRENT_POSITION_LONGITUDE
ORDER BY SYS_MOVEMENT_EVT_ID DESC) LAT_RANK
FROM TMS_MOVEMENT_EVT
)
SELECT
CURRENT_POSITION_LATITUDE,
CURRENT_POSITION_LONGITUDE,
SYS_EVT_TARGET_ID,
SYS_MOVEMENT_EVT_ID
FROM CTE_DATA
WHERE LAT_RANK = 1