用于查找存在重复最小列时关联的min列和其他列的SQL

时间:2017-08-01 21:49:18

标签: sql sql-server-2012 aggregation

您好我正在处理一个特定情况,我需要在最小值可以重复时找到同一记录的最小值和另一个列值

Table A

  ColumnA ColumnB ColumnC
   1          10     07/21/2017
   1          9      07/22/2017
   1          9      07/23/2017
   2            20   07/23/2017
   2           20    07/24/2017
   3          15     07/21/2017
   3          15     07/21/2017

The output should be

ColumnD COlumnE  ColumnF
 1         9      07/23/2017
 2         20     07/24/2017
 3         15     07/21/2017

在找到最小值及其相关的最新日期。

2 个答案:

答案 0 :(得分:0)

您可以使用聚合进行此操作,但使用row_number()

select t.*
from (select t.*, row_number() over (partition by D order by B) as seqnum
      from t
     ) t
where seqnum = 1;

答案 1 :(得分:0)

由于样本结果是columnC的columnB和MAX的最小值,因此可以使用以下SQL

SELECT t.*
  FROM (SELECT columnA,
               columnB,
               columnC,
               row_number() OVER (PARTITION BY columnA ORDER BY columnB, MAX(columnC) DESC) rmin
          FROM agg_dur
         GROUP BY columnA,
                  columnB,
                  columnC
        ) t
 WHERE t.rmin = 1

结果

columnA    columnB    columnC       rmin
1          9          2017-07-23    1
2          20         2017-07-24    1
3          15         2017-07-21    1