当前位置: 代码迷 >> Sql Server >> 求几条SQL语句解决思路
  详细解决方案

求几条SQL语句解决思路

热度:97   发布时间:2016-04-27 18:06:43.0
求几条SQL语句
表1结构如下:
run_id prcs_id use_id diliver_time flow_id end_time
231 1 45467 2011-09-14 15:47:00 1 null
231 2 67676 2011-09-14 16:35:12 1 null
231 3 67676 null 1 null
235 1 45467 null 3 null
235 2 67376 2011-11-14 16:35:12 3 null
235 3 45554 2011-11-07 11:06:57 3 null
235 4 45454 null 3 null
238 8 45454 2011-11-07 11:06:27 6 null
239 3 46554 2011-11-07 11:06:57 6 2011-11-07 13:06:57
239 4 46454 2011-11-07 12:06:57 6 2011-11-07 13:06:57
239 5 25454 2011-11-07 13:06:57 6 2011-11-07 13:06:57
236 1 35467 2011-11-17 15:47:00 7 2011-11-22 13:06:57
236 2 67376 2011-11-19 16:35:12 7 2011-11-22 13:06:57
236 3 46d54 2011-11-20 11:06:57 7 2011-11-22 13:06:57
236 4 46c54 2011-11-21 12:06:57 7 2011-11-22 13:06:57
236 5 25454 2011-11-22 13:06:57 7 2011-11-22 13:06:57
266 1 25654 2011-11-22 16:06:57 8 null
996 1 35467 2011-01-17 15:47:00 3 null
996 2 67376 2011-11-19 16:35:12 3 null

1.我想查找出diliver_time字段为1那行数据,结果如下:
结果1:
run_id prcs_id use_id diliver_time flow_id end_time
266 1 25654 2011-11-22 16:06:57 8 null
2、我想把prcs_id列单独为1出现的数据全部过滤掉
结果2:
run_id prcs_id use_id diliver_time flow_id end_time
231 1 45467 2011-09-14 15:47:00 1 null
231 2 67676 2011-09-14 16:35:12 1 null
231 3 67676 null 1 null
235 1 45467 null 3 null
235 2 67376 2011-11-14 16:35:12 3 null
235 3 45554 2011-11-07 11:06:57 3 null
235 4 45454 null 3 null
238 8 45454 2011-11-07 11:06:27 6 null
239 3 46554 2011-11-07 11:06:57 6 2011-11-07 13:06:57
239 4 46454 2011-11-07 12:06:57 6 2011-11-07 13:06:57
239 5 25454 2011-11-07 13:06:57 6 2011-11-07 13:06:57
236 1 35467 2011-11-17 15:47:00 7 2011-11-22 13:06:57
236 2 67376 2011-11-19 16:35:12 7 2011-11-22 13:06:57
236 3 46d54 2011-11-20 11:06:57 7 2011-11-22 13:06:57
236 4 46c54 2011-11-21 12:06:57 7 2011-11-22 13:06:57
236 5 25454 2011-11-22 13:06:57 7 2011-11-22 13:06:57
996 1 35467 2011-01-17 15:47:00 3 null
996 2 67376 2011-11-19 16:35:12 3 null
3、我想把prcs_id列单独为不连续出现(比如1,2,3……)的那组(相同run_id)数据全部过滤掉
结果3:
run_id prcs_id use_id diliver_time flow_id end_time
231 1 45467 2011-09-14 15:47:00 1 null
231 2 67676 2011-09-14 16:35:12 1 null
231 3 67676 null 1 null
235 1 45467 null 3 null
235 2 67376 2011-11-14 16:35:12 3 null
235 3 45554 2011-11-07 11:06:57 3 null
235 4 45454 null 3 null
236 1 35467 2011-11-17 15:47:00 7 2011-11-22 13:06:57
236 2 67376 2011-11-19 16:35:12 7 2011-11-22 13:06:57
236 3 46d54 2011-11-20 11:06:57 7 2011-11-22 13:06:57
236 4 46c54 2011-11-21 12:06:57 7 2011-11-22 13:06:57
236 5 25454 2011-11-22 13:06:57 7 2011-11-22 13:06:57
996 1 35467 2011-01-17 15:47:00 3 null
996 2 67376 2011-11-19 16:35:12 3 null
3、我想把prcs_id列单独为一行那组(相同run_id)数据全部过滤掉
结果4:
run_id prcs_id use_id diliver_time flow_id end_time
231 1 45467 2011-09-14 15:47:00 1 null
231 2 67676 2011-09-14 16:35:12 1 null
231 3 67676 null 1 null
235 1 45467 null 3 null
235 2 67376 2011-11-14 16:35:12 3 null
235 3 45554 2011-11-07 11:06:57 3 null
235 4 45454 null 3 null
239 3 46554 2011-11-07 11:06:57 6 2011-11-07 13:06:57
239 4 46454 2011-11-07 12:06:57 6 2011-11-07 13:06:57
239 5 25454 2011-11-07 13:06:57 6 2011-11-07 13:06:57
236 1 35467 2011-11-17 15:47:00 7 2011-11-22 13:06:57
236 2 67376 2011-11-19 16:35:12 7 2011-11-22 13:06:57
236 3 46d54 2011-11-20 11:06:57 7 2011-11-22 13:06:57
236 4 46c54 2011-11-21 12:06:57 7 2011-11-22 13:06:57
236 5 25454 2011-11-22 13:06:57 7 2011-11-22 13:06:57
996 1 35467 2011-01-17 15:47:00 3 null
996 2 67376 2011-11-19 16:35:12 3 null


------解决方案--------------------
再回复一下:
SQL code
declare @表1 table (run_id int,prcs_id int,use_id varchar(5),diliver_time datetime,flow_id int,end_time datetime)insert into @表1select 231,1,'45467','2011-09-14 15:47:00',1,null union allselect 231,2,'67676','2011-09-14 16:35:12',1,null union allselect 231,3,'67676',null,null,null union allselect 235,1,'45467',null,null,null union allselect 235,2,'67376','2011-11-14 16:35:12',3,null union allselect 235,3,'45554','2011-11-07 11:06:57',3,null union allselect 235,4,'45454',null,null,null union allselect 238,8,'45454','2011-11-07 11:06:27',6,null union allselect 239,3,'46554','2011-11-07 11:06:57',6,'2011-11-07 13:06:57' union allselect 239,4,'46454','2011-11-07 12:06:57',6,'2011-11-07 13:06:57' union allselect 239,5,'25454','2011-11-07 13:06:57',6,'2011-11-07 13:06:57' union allselect 236,1,'35467','2011-11-17 15:47:00',7,'2011-11-22 13:06:57' union allselect 236,2,'67376','2011-11-19 16:35:12',7,'2011-11-22 13:06:57' union allselect 236,3,'46d54','2011-11-20 11:06:57',7,'2011-11-22 13:06:57' union allselect 236,4,'46c54','2011-11-21 12:06:57',7,'2011-11-22 13:06:57' union allselect 236,5,'25454','2011-11-22 13:06:57',7,'2011-11-22 13:06:57' union allselect 266,1,'25654','2011-11-22 16:06:57',8,null union allselect 996,1,'35467','2011-01-17 15:47:00',3,null union allselect 996,2,'67376','2011-11-19 16:35:12',3,null union allselect 999,3,'67376','2011-11-19 16:35:12',3,null union all --这两条数据是我添加上的,测试用的select 999,5,'67376','2011-11-19 16:35:12',3,null --3、我想把prcs_id列单独为不连续出现(比如1,2,3……)的那组(相同run_id)数据全部过滤掉;with maco as(select row_number() over (partition by run_id order by prcs_id) as rid, * from @表1)select run_id ,prcs_id ,use_id ,diliver_time,flow_id ,end_time from maco where run_id not in (select distinct run_id from maco group by prcs_id-rid,run_id having(count(1)=1))/*run_id      prcs_id     use_id diliver_time            flow_id     end_time----------- ----------- ------ ----------------------- ----------- -----------------------231         1           45467  2011-09-14 15:47:00.000 1           NULL231         2           67676  2011-09-14 16:35:12.000 1           NULL231         3           67676  NULL                    NULL        NULL235         1           45467  NULL                    NULL        NULL235         2           67376  2011-11-14 16:35:12.000 3           NULL235         3           45554  2011-11-07 11:06:57.000 3           NULL235         4           45454  NULL                    NULL        NULL239         3           46554  2011-11-07 11:06:57.000 6           2011-11-07 13:06:57.000239         4           46454  2011-11-07 12:06:57.000 6           2011-11-07 13:06:57.000239         5           25454  2011-11-07 13:06:57.000 6           2011-11-07 13:06:57.000236         1           35467  2011-11-17 15:47:00.000 7           2011-11-22 13:06:57.000236         2           67376  2011-11-19 16:35:12.000 7           2011-11-22 13:06:57.000236         3           46d54  2011-11-20 11:06:57.000 7           2011-11-22 13:06:57.000236         4           46c54  2011-11-21 12:06:57.000 7           2011-11-22 13:06:57.000236         5           25454  2011-11-22 13:06:57.000 7           2011-11-22 13:06:57.000996         1           35467  2011-01-17 15:47:00.000 3           NULL996         2           67376  2011-11-19 16:35:12.000 3           NULL*/
  相关解决方案