SQL Query用于选择公共数据的随机值

时间:2017-01-23 23:04:12

标签: sql oracle grouping

我想要一个SQL语句来获取具有最小值的行到" C4"。

考虑一下表:

Table

我需要这样的东西

Result

我需要对N2和N3进行分组,因为C2和C3的值是相同的,我可以选择任何C4到组的值,在这种情况下我们可以取10或20,或者在C1中使用相同的N4和N5。可以花12或14。

不需要灌浆的最大值,我需要一个值与C2和C3是相同的。 C1是Id,可以是1,2,3 ..等等。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

SELECT * FROM yourtable
WHERE C4 = (SELECT MIN(C4) FROM yourtable)

答案 1 :(得分:1)

无法将您的问题与显示的预期答案完全匹配。

我想你在这里尝试使用C2 / C3列进行分组聚合。你可以试试这个。

SELECT * 
FROM [Table_Name] t
    JOIN
        (
            SELECT 
                C2, C3, MIN(C4) as MIN_C4
            FROM 
                [Table_Name]
            GROUP BY C2, C3
        ) Aggreated_Table ON Aggreated_Table.C2 = t.C2 AND Aggreated_Table.C3 = t.C3 AND Aggreated_Table.MIN_C4 = t.C4

或者,使用ROW_NUMBER()

SELECT C1, C2, C3, C4
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY C2, C3 ORDER BY C4) AS rk FROM [TABLE_NAME]
) Ranked_Table
WHERE rk = 1