1

我有一张Table这样的桌子:

ColumnA (VARCHAR)|ColumnB (VARCHAR)|ColumnC (VARCHAR)|ColumnD (DATE)
     A1                 B1               C1          2012-12-06
     A1                 B1               C1          2012-12-12
     A2                 B2               C2          2012-12-07
     A2                 B2               C2          2012-12-09

我只想选择与 ColumnA-ColumnB-ColumnC 组合的第一次出现,因此结果将是这样的:

A1 | B1 | C1 | 2012-12-06
A2 | B2 | C2 | 2012-12-07
4

2 回答 2

2

您可以在日期列和其余组上使用聚合函数:

select ColumnA, ColumnB, ColumnC, Min(ColumnD)
from yourtable
group by ColumnA, ColumnB, ColumnC

请参阅带有演示的 SQL Fiddle

或者您可以使用row_number()

select ColumnA, ColumnB, ColumnC, ColumnD
from
(
  select ColumnA, ColumnB, ColumnC, ColumnD,
    row_number() over(partition by ColumnA, ColumnB, ColumnC order by ColumnD) rn
  from yourtable
) src
where rn = 1

请参阅带有演示的 SQL Fiddle

于 2012-12-07T13:22:58.563 回答
1

看起来像 group-by 是你想要的。

SELECT ColumnA, ColumnB, ColumnC, MIN(ColumnD)
FROM MyTable
GROUP BY ColumnA, ColumnB, ColumnC
于 2012-12-07T13:23:46.423 回答