如何为ID不同的列选择唯一值?

时间:2016-02-11 20:25:31

标签: oracle select distinct

我有一个返回ID列和值列的select语句。 ID列中的值是不同的,但值列中有重复项。

以下是一个例子:

{{1}}

正如您所看到的,有4个唯一的名称值,但返回了6条记录,因为ID都不同。这通常不应该这样做,但这只是示例数据(不是真正使用名称),而我需要做的是删除名称重复的记录。

我试图使用超前或滞后功能,但无法将其删除重复项。

有关如何修改直接选择语句以获取两列但只有唯一名称的任何想法?

2 个答案:

答案 0 :(得分:3)

这会删除具有重复名称的记录,但会留下ID最低的第一条记录。

DELETE FROM table t
WHERE EXISTS (
   SELECT null FROM table t1
   WHERE t.name = t1.name AND t.id < t1.id
)

如果您只想选择记录,那么

SELECT * FROM table t
WHERE NOT EXISTS(
   SELECT null FROM table t1
   WHERE t.name = t1.name AND t.id < t1.id
)

答案 1 :(得分:0)

尝试:

SELECT MIN(ID), Value
FROM table
GROUP BY Value

替代:

SELECT DISTINCT MIN(ID) OVER (PARTITION BY Value), Value
FROM table