一条DB2或SQL SERVER 查询问题,有点难度
补充:目前数据库里查询出了多条记录,比如叫 Class表,以ID作为分组条件,每个记录都有一个时间entry_time,有一个中文描述字段summary,只可能为"首次"和"后续"两个枚举值,但是目前所有summary为空。
我想把所有class表里,每一个相同的id分组,作如下处理:
把每一个id里entry_time时间最小的,summary赋予"首次"的值;其余大于这个最小时间的summary字段赋予"后续"的值,不要改变数据库的值,直接用select查询出来。
简单说就是每个ID的查询,都是保证最小时间是“首次”的字样,其他都是“后续”
请问各位大侠如何处理?最好用DB2语句写出来,db2不行SQLSERVER也可以
答案:declare @t table(fa varchar(10)
,fb int)
insert into @t
select 'a',1
union all select 'a',2
union all select 'b',2
union all select 'b',4
union all select 'b',5
select a.fa ,a.fb ,case when a.fb =b.fbMin then '首次' else '后续' end from @t a
left join (
select fa ,fbMin=MIN (fb) from @t
group by fa) b on a.fa =b.fa
其他:select
t1.id
/*利用左连接没有匹配上的记录为空来判断*/
,case when t2.min_entry_time is not null then "首次" else "后续" end as summary
from Class t1
left join
/*查询每个id最小的时间*/
(select id,min(entry_time) as min_entry_time from Class group by id) t2
on t1.id = t2.id and t1.entry_time = t2.entry_time
最后说一句,这种SQL还算好吧~
上一个:DB2里面export怎么用
下一个:DB2中 取当前系统日期减去表xxx.date 的sql语句怎么写