Oracle 10g - 根据某些列的最大值返回单行

时间:2013-12-12 23:46:24

标签: sql oracle plsql

我有一个包含许多列和许多重复行的表

主键由C1,C2,Year,C3,C5列组成,我只想根据较高的Date,C6和C4列(按此顺序)保留每个重复行的一行

例如:让我们根据4列(我们的主键)获取最后2行,我们只需保留其中一行并执行此操作:我们首先比较哪一行具有最高的Date列(它们我们必须转到第二列(C6),它们具有相同的值= 0,最后我们比较C4列,我们采用更高的(= 1)。

对于这个例子,我们必须选择最后一行并删除另一行。

C1  C2  Year      C3   C4  C5  C6     Date
------------------------------------------------------------------
100 74  2013    2697    0   1   0   11/06/2013
100 74  2013    2697    1   1   0   11/06/2013
100 74  2013    2697    0   1   1   12/06/2013
100 74  2013    2707        1   0   11/06/2013
100 74  2013    2707        2   0   11/06/2013
100 74  2013    2707        3   0   11/06/2013
100 74  2013    2708    0   1   0   11/06/2013
100 74  2013    2708    1   1   0   11/06/2013
100 74  2013    2708    1   1   1   25/06/2013
100 74  2013    2708    0   1   1   30/06/2013
100 74  2013    3211    0   1   0   28/07/2013
100 74  2013    3211    1   1   0   28/07/2013

由于

1 个答案:

答案 0 :(得分:0)

总体思路:

SELECT 
  DENSE_RANK() OVER (PARTITION BY c1, c2, year, c3, c5 ORDER BY date, c6, c4) 
FROM table

您可能希望将其包装在另一个SELECT中以剪切重复项。