大家看下这个存储过程怎么写

HatoLee 2010-04-27 09:35:35
有张表,字段time,data1,data2,data3……
time字段 数据每小时一个,例如2010-4-47 0:00:00
data1字段,数据一天24小时都不同
data2,数据每天不定时,但不超过6条;
其他数据不管

当data2没数据时是取上一时刻的数据补足

例如:
time data1 data2 data3……
2010-4-27 0:00:00 7.2 26 56
2010-4-47 1:00:00 7.1 26 58
2010-4-47 2:00:00 7.3 26 60
2010-4-47 3:00:00 8.0 27 62
2010-4-47 4:00:00 8.2 27 64

现在要取出例如上表中的第一条和第四条数据,即data2相同数据中时间较早的一条并且是data3的和写入另一张表。
问题是:
有可能出现这种情况
接下来2010-4-47 5:00:00 的data2数据正好也是26怎么办?

我写了个存储过程在http://blog.csdn.net/zero0223/archive/2010/04/26/5528654.aspx
(data2对应的是ZAD_DATA5,data3对应的是ZAD_DATA8)

首先上面提出的问题不知道解决,只能是理想状态下data2的数据都不同
还有就是这个写的感觉很烂,哪位大师能不能改良下~
...全文
159 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sb3day 2010-05-03
  • 打赏
  • 举报
回复

学习
HatoLee 2010-04-27
  • 打赏
  • 举报
回复
嘻嘻,测试了下你的代码
结果和我的一样,没有删选出两个不同时段的26
HatoLee 2010-04-27
  • 打赏
  • 举报
回复
结果应该是
time data1 data2 data3
----------------------------------------------
2010-04-27 00:00:00.000 7.2 26 174
2010-04-27 03:00:00.000 8 27 126
2010-4-27 05:00:00.000 7.3 26 64
HatoLee 2010-04-27
  • 打赏
  • 举报
回复
LS的不对啊,'2010-4-27 5:00:00'的数据呢?
喜-喜 2010-04-27
  • 打赏
  • 举报
回复
--------------------SQL Server数据格式化工具-------------------
---------------------------------------------------------------
-- DESIGNER :happycell188(喜喜)
-- QQ :584738179
-- Development Tool :Microsoft Visual C++ 6.0 C Language
-- FUNCTION :CONVERT DATA TO T-SQL
---------------------------------------------------------------
-- Microsoft SQL Server 2005
-- Developer Edition on Microsoft Windows XP [版本 5.1.2600]
---------------------------------------------------------------
---------------------------------------------------------------

use test
go
if object_id('test.dbo.tb') is not null drop table tb
-- 创建数据表
create table tb
(
time datetime,
data1 float,
data2 int,
data3 int
)
go
--插入测试数据
insert into tb select '2010-4-27 0:00:00',7.2,26,56
union all select '2010-4-27 1:00:00',7.1,26,58
union all select '2010-4-27 2:00:00',7.3,26,60
union all select '2010-4-27 3:00:00',8.0,27,62
union all select '2010-4-27 4:00:00',8.2,27,64
union all select '2010-4-27 5:00:00',7.3,26,64
go
--代码实现

select time,data1,data2,data3 from (
select idd=row_number()over( partition by data2 order by time),* from tb)m
where idd=1

/*测试结果

time data1 data2 data3
----------------------------------------------
2010-04-27 00:00:00.000 7.2 26 56
2010-04-27 03:00:00.000 8 27 62

(2 行受影响)
*/
abcdef1111111 2010-04-27
  • 打赏
  • 举报
回复
先帮顶起来,再学习

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧