存在重复项时如何 select 唯一记录

How to select unique records when duplicates exist

我正在尝试编写一个只显示每个 APEL_ID

的最新 HEAR_DT 的查询
SELECT APEL_ID, HEAR_DT 
FROM HEARINGS
APEL_ID HEAR_DT
101 01-OCT-08
101 02-OCT-08
101 03-OCT-08
102 06-OCT-08
102 07-OCT-08
102 08-OCT-08
103 09-OCT-08
103 10-OCT-08
103 11-OCT-08
104 23-OCT-08
104 24-OCT-08
104 25-OCT-08
104 25-OCT-08

当我像往常一样编写查询时,我在一定程度上得到了唯一的记录,但是 HEAR_DT 相同的记录都出现了

HEAR_DT 是“日期”而不是“日期时间”数据类型,所以我无法使用时间 select Max

的组成部分

是否可以对此查询(或编写的不同查询)执行任何操作,以仅显示唯一记录。我想展示任何显示为重复项的内容。他们中的哪一个被选中并不重要。 (类似于“前 1”或“任意”)

SELECT APEL_ID, MAX(HEAR_DT) AS LATEST_HEAR_DT 
FROM HEARINGS 
GROUP BY APEL_ID
APEL_ID 最新_HEAR_DT
101 03-OCT-08
102 08-OCT-08
103 11-OCT-08
104 25-OCT-08
104 25-OCT-08

这个查询:

SELECT APEL_ID, MAX(HEAR_DT) AS LATEST_HEAR_DT 
FROM HEARINGS 
GROUP BY APEL_ID;

应该 return 每个 APEL_ID 恰好一行。它不会 return 多行。

如果您想要原始数据中的行,每个 APEL_ID 一行,请使用 window 函数:

SELECT h.*
FROM (SELECT h.*,
             ROW_NUMBER() OVER (PARTITION BY APEL_ID ORDER BY HEAR_DT DESC) as seqnum
      FROM HEARINGS h
     ) h
WHERE seqnum = 1;

这是解决方案。这有效

SELECT UNIQUE APEL_ID, MAX(TO_DATE(HEAR_DT, 'DD-MON-YY')) AS LATEST_HEAR_DT 
FROM mytable  
GROUP BY APEL_ID