存档

2009年6月 的存档

一个存储过程

2009年6月15日

用的是SQL SERVER2K
现在有一张表,
大概字段
id(自增长), SNumber(站号, 001, 002, etc.), SName(站名),GTime(datetime,获取测站数据时间),Level(float, 测站数据)

现在大概有7,80个站, 每隔6分钟就会同时向数据库里添加一条记录.

现在想实现把同一天内相同时间过来的数据先按照SNumber排列, 再按gtime倒序排列,然后对数据重新编号(1,2,3,etc) 请问如何实现?

例如原始记录
id snumber sname gtime level
66 023 测站1 2009-12-17 10:00:00 50.12
65 058 测站2 2009-12-17 10:00:00 30.24
64 018 测站3 2009-12-17 10:00:00 83.01
63 018 测站3 2009-12-17 09:54:00 50.12
62 058 测站2 2009-12-17 09:54:00 30.24
61 023 测站1 2009-12-17 09:54:00 83.01

按照要求排序后结果为
newid snumber sname gtime level
1 018 测站3 2009-12-17 10:00:00 83.01
2 023 测站1 2009-12-17 10:00:00 50.12
3 058 测站2 2009-12-17 10:00:00 30.24
1 018 测站3 2009-12-17 09:54:00 83.01
2 023 测站1 2009-12-17 09:54:00 50.12
3 058 测站2 2009-12-17 09:54:00 30.24

正解:

CREATE TABLE taoistong 
(id int identity(1,1)
,snumber char(3)
,sname nvarchar(4)
,gtime smalldatetime
,level float )
INSERT INTO taoistong SELECT 
'023',  N'测站1', '2009-12-17 10:00:00', 50.12 
INSERT INTO taoistong SELECT 
 '058', N'测站2', '2009-12-17 10:00:00', 30.24 
INSERT INTO taoistong SELECT 
 '018', N'测站3', '2009-12-17 10:00:00', 83.01 
INSERT INTO taoistong SELECT 
 '018', N'测站3', '2009-12-17 09:54:00', 50.12 
INSERT INTO taoistong SELECT 
 '058', N'测站2', '2009-12-17 09:54:00', 30.24 
INSERT INTO taoistong SELECT 
 '023', N'测站1', '2009-12-17 09:54:00', 83.01 
 
SELECT (SELECT count(1) FROM taoistong b WHERE a.gtime=b.gtime AND a.snumber>=b.snumber)
,snumber,sname,gtime,level  
FROM taoistong a ORDER BY gtime DESC,snumber

admin CSharp