读书人

存储过程 过滤记录生产新表有关问题

发布时间: 2013-07-09 09:50:47 作者: rapoo

存储过程 过滤记录生产新表问题
1.查询表1中所以状态为false的数据
2.根据SN分组这写数据
3.把每一组的数据按时间排序
4.依次把时间间隔大于10分钟的数据插入表2中
5.插入成功后,把每组的状态改为true

表1
id SN Name DevSN arDate States
--- --- ------ ------------------ ----------------------- ------
150 98 8112011050000380 2013-06-28 09:59:10.000 0
151 99 8112011050000380 2013-06-28 13:54:55.000 0
152 98 8112011050000380 2013-06-28 13:56:55.000 0
153 99 8112011050000380 2013-06-28 09:59:10.000 0
154 98 8112011050000380 2013-06-28 13:54:55.000 0
155 99 8112011050000380 2013-06-28 13:56:55.000 0
156 98 8112011050000380 2013-06-28 18:07:11.000 0

表2 (想要的结果)
id SN Name DevSN arDate
--- --- ---- ---------------- -----------------------
153 99 8112011050000380 2013-06-28 09:59:10.000
151 99 8112011050000380 2013-06-28 13:54:55.000
150 98 8112011050000380 2013-06-28 09:59:10.000
154 98 8112011050000380 2013-06-28 13:54:55.000
156 98 8112011050000380 2013-06-28 18:07:11.000 存储
[解决办法]
过滤记录就用select + where,然后用游标循环数据集,组织新数据


[解决办法]
CREATE TABLE tb1(id INT,sn INT,NAME SYSNAME,arDate DATETIME,states BIT);
INSERT INTO tb1 VALUES (150,98,'8112011050000380','2013-06-28 09:59:10.000',0)
INSERT INTO tb1 VALUES (151,99,'8112011050000380','2013-06-28 13:54:55.000',0)
INSERT INTO tb1 VALUES (152,98,'8112011050000380','2013-06-28 13:56:55.000',0)
INSERT INTO tb1 VALUES (153,99,'8112011050000380','2013-06-28 09:59:10.000',0)
INSERT INTO tb1 VALUES (154,98,'8112011050000380','2013-06-28 13:54:55.000',0)
INSERT INTO tb1 VALUES (155,99,'8112011050000380','2013-06-28 13:56:55.000',0)
INSERT INTO tb1 VALUES (156,98,'8112011050000380','2013-06-28 18:07:11.000',0)

SELECT * INTO tb2 FROM tb1 WHERE 1=0

;WITH tb AS(SELECT row_number() OVER ( PARTITION BY sn ORDER BY arDate asc) rowid,id,sn,name,ardate ,states
FROM tb1 WHERE states = 0)

INSERT INTO tb2
SELECT id,sn,NAME,ardate,states FROM tb WHERE EXISTS (SELECT NULL FROM tb a WHERE a.rowid + 1 = tb.rowid
AND DATEDIFF(mi,a.ardate,tb.ardate)>10)
OR rowid = 1
ORDER BY sn DESC,ardate asc

SELECT * FROM tb2;

读书人网 >C#

热点推荐