SQL:为每个唯一组选择最小值并更改值

时间:2015-06-24 12:15:19

标签: mysql sql

我有一个看起来像这样的表:

ID日期类别

x   1995      A
x   1996      B
z   1995      B
z   1996      A
y   1995      B
y   1996      B

我想要做的是将类别设置为每个ID的最小日期值。所以最终结果如下:

ID日期类别

x   1995      A
x   1996      A
z   1995      B
z   1996      B
y   1995      B
y   1996      B

有人知道如何在SQL中执行此操作吗?谢谢!

3 个答案:

答案 0 :(得分:1)

试试这个

declare @t table (id char(1), date int, category char(1))
insert into @t
select 'x',   1995,      'A' union all
select 'x',   1996 ,     'B'  union all
select 'z',   1995  ,    'B' union all
select 'z',   1996   ,   'A' union all
select 'y',   1995    ,  'B' union all
select 'y',   1996     , 'B'

select t1.Id,t1.Date,t2.category from @t as t1 left join
( 
select t1.Id,t1.Date,t1.category from @t as t1 inner join
    (
    select ID, min(Date) as Date from @t group by ID
    ) as t2 on t1.Id=t2.Id and t1.Date=t2.Date
) as t2 on t1.Id=t2.Id 

答案 1 :(得分:1)

虽然可能有更聪明的方法,但应该这样做:

select table1.id, table1.date, t3.category 
from table1
join (
  select t1.id, t1.category
  from table1 t1
  join (
    select id, min(date) as min_date 
    from table1 
    group by id
  ) t2 on t1.id = t2.id and t1.date = t2.min_date
) t3 on table1.id = t3.id

在查询中,源表名为table1。逻辑是内部派生表将外部限制为min(日期)

Sample SQL Fiddle

答案 2 :(得分:1)

您可以使用子查询:

ant
相关问题