我有一个看起来像这样的表:
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中执行此操作吗?谢谢!
答案 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(日期)
答案 2 :(得分:1)
您可以使用子查询:
ant