合并多行记录

ybvb 2010-10-10 02:37:46
DATE A B C D
201009140945 12.35 12.38 12.35 12.35
201009140950 12.35 12.42 12.35 12.40
201009140955 12.40 12.44 12.40 12.43
201009141000 12.43 12.46 12.42 12.44
201009141005 12.46 12.53 12.46 12.47
201009141010 12.47 12.47 12.46 12.47

每三行合并成一行
第一行的A值是合并行A值
第三行的D值是合并行D值
合并行的B是三行B中的最大值
合并行的C是三行C中的最小值

结果

DATE A B C D
201009140955 12.35 12.44 12.35 12.43
201009141010 12.43 12.53 12.42 12.47

数据量大,需要最佳性能,用sql语句生成。

...全文
116 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
叶子 2010-10-10
数据逻辑比较复杂,当数据量大的时候,怎么样效果都不会太好。
回复
SQLCenter 2010-10-10
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(DATE bigint, A float, B float, C float, D float)
insert into #
select 201009140945, 12.35, 12.38, 12.35, 12.35 union all
select 201009140950, 12.35, 12.42, 12.35, 12.40 union all
select 201009140955, 12.40, 12.44, 12.40, 12.43 union all
select 201009141000, 12.43, 12.46, 12.42, 12.44 union all
select 201009141005, 12.46, 12.53, 12.46, 12.47 union all
select 201009141010, 12.47, 12.47, 12.46, 12.47

;with cte as
(
select row=row_number()over(order by DATE)-1, * from #
)
select
max(DATE)DATE,
A=max(case when row/3*3=row then A end),
B=max(B),
C=min(C),
D=max(case when row/3*3+2=row then D end)
from cte group by row/3

/*
DATE A B C D
-------------------- ---------------------- ---------------------- ---------------------- ----------------------
201009140955 12.35 12.44 12.35 12.43
201009141010 12.43 12.53 12.42 12.47
*/
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-10 02:37
社区公告
暂无公告