我有一个很长的复杂(至少对我而言)查询,它返回我需要的确切数据。唯一的问题是由于查询中的一个连接具有多对一关系,因此某些ID被复制。我想做的只是从查询中获取输出,并为每个唯一ID选择一行。如何从重复的ID中选择这一行并不重要,我只需要以最简单的方式将其减少到每个ID一行。
换句话说,我有一个冗长的杂乱查询,它给我提供了我需要的数据,整齐命名的列等但是重复的ID:
ID column1 column2 column2... column50
111 data data data ... data
111 data data data ... data
112 data data data ... data
113 data data data ... data
113 data data data ... data
113 data data data ... data
我想从查询中获取此输出并将其缩小为
ID column1 column2 column2... column50
111 data data data ... data
112 data data data ... data
113 data data data ... data
我遇到的挑战是我不知道如何从查询中获取整个输出并使用它(比如删除重复项)而不首先将其写入表中,我无法写到桌子上。
答案 0 :(得分:2)
如果数据相同,那么最简单的方法是将您的凌乱查询包装在另一个只使用ĉ
的查询中。像这样:
SELECT DISTINCT
如果不相同,则可以使用:
SELECT DISTINCT *
FROM (
your_messy_query
)
SELECT *
FROM (
SELECT t.*,
ROW_NUMBER() OVER ( PARTITION BY id ORDER BY something ) AS rn
FROM (
your_messy_query
) t
)
WHERE rn = 1;
可以是:
ORDER BY something
; ORDER BY ROWNUM
如果您需要非确定性订单 - 但是,这通常似乎与ORDER BY NULL
具有相同的效果。