求Sql语句?

wj081066 2012-10-12 09:20:03
这是一个考试题。一直没想到好的效率高的sql出来,求这个的sql语句。

求下列表中一天或者连续天数内没有问题的数据之和大于1100条的列表?

比如陈红的,9月4号到9月5号连续没有问题,合计数1084,没有超过1100.不计,
9月8号到9月10号连续没有问题,合计1777条,大于1100条,取出这个开始日期和结束日期,并将合计数得出。

id 姓名 日期 合格条数 有问题条数
1 陈红 2012-9-1 539 0
2 陈红 2012-9-2 523 4
3 陈红 2012-9-3 1080 5
4 陈红 2012-9-4 570 0
5 陈红 2012-9-5 514 0
6 陈红 2012-9-6 574 1
7 陈红 2012-9-7 545 12
8 陈红 2012-9-8 556 0
9 陈红 2012-9-9 597 0
10 陈红 2012-9-10 624 0
1 陈杰新 2012-9-1 445 3
2 陈杰新 2012-9-2 436 0
3 陈杰新 2012-9-3 443 0
4 陈杰新 2012-9-4 314 0
5 陈杰新 2012-9-5 471 3
6 陈杰新 2012-9-6 447 0
7 陈杰新 2012-9-7 472 0
8 陈杰新 2012-9-9 497 0
9 陈杰新 2012-9-12 500 2
10 陈杰新 2012-9-13 475 0
11 陈杰新 2012-9-14 435 2
1 崔兵强 2012-9-1 464 4
2 崔兵强 2012-9-3 478 0
3 崔兵强 2012-9-4 520 0
4 崔兵强 2012-9-5 559 2

得到下面的结果:
姓名 开始日期 结束日期 条数
陈红 2012-9-8 2012-9-10 1777
陈杰新 2012-9-2 2012-9-4 1193
陈杰新 2012-9-6 2012-9-9 1416

效率高点的,多谢指教~~
...全文
158 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dodolzc10 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 2 楼 的回复:

造书脚本:
SQL code

if OBJECT_ID('tb') is not null drop table tb
go
create table tb
(
ID int,
姓名 nvarchar(10),
生产日期 varchar(10),
合格条数 int,
缺陷条数 int
)
insert into tb
select
……
[/Quote]
哈哈!这是星哥开场白!鼓起勇气表白去,哈哈!
学习黄老师的,记下记下!
DBA_磊仔 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
哪呀,这样生成脚本是最方便的,你自己编写几个方法试一下~~哈哈
[/Quote]我是说我们用同样的方法写生成脚本
wj081066 2012-10-13
  • 打赏
  • 举报
回复
哪呀,这样生成脚本是最方便的,你自己编写几个方法试一下~~哈哈
DBA_磊仔 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

造书脚本:
SQL code

if OBJECT_ID('tb') is not null drop table tb
go
create table tb
(
ID int,
姓名 nvarchar(10),
生产日期 varchar(10),
合格条数 int,
缺陷条数 int
)
insert into tb
select
1, '陈红……
[/Quote]你写的构造脚本和我写的竟然如此雷同
DBA_磊仔 2012-10-12
  • 打赏
  • 举报
回复
--构造测试数据
create table #tb
(id int, 姓名 nvarchar(10), 日期 date, 合格条数 int, 有问题条数 int)
insert into #tb
select 1, '陈红', '2012-9-1', 539, 0 union all select
2, '陈红', '2012-9-2', 523, 4 union all select
3, '陈红', '2012-9-3', 1080, 5 union all select
4, '陈红', '2012-9-4', 570, 0 union all select
5, '陈红', '2012-9-5', 514, 0 union all select
6, '陈红', '2012-9-6', 574, 1 union all select
7, '陈红', '2012-9-7', 545, 12 union all select
8, '陈红', '2012-9-8', 556, 0 union all select
9, '陈红', '2012-9-9', 597, 0 union all select
10, '陈红', '2012-9-10', 624, 0 union all select
1, '陈杰新', '2012-9-1', 445, 3 union all select
2, '陈杰新', '2012-9-2', 436, 0 union all select
3, '陈杰新', '2012-9-3', 443, 0 union all select
4, '陈杰新', '2012-9-4', 314, 0 union all select
5, '陈杰新', '2012-9-5', 471, 3 union all select
6, '陈杰新', '2012-9-6', 447, 0 union all select
7, '陈杰新', '2012-9-7', 472, 0 union all select
8, '陈杰新', '2012-9-9', 497, 0 union all select
9, '陈杰新', '2012-9-12', 500, 2 union all select
10, '陈杰新', '2012-9-13', 475, 0 union all select
11, '陈杰新', '2012-9-14', 435, 2 union all select
1, '崔兵强', '2012-9-1', 464, 4 union all select
2, '崔兵强', '2012-9-3', 478, 0 union all select
3, '崔兵强', '2012-9-4', 520, 0 union all select
4, '崔兵强', '2012-9-5', 559, 2

--假设你的数据一个人一天只有一条记录

;with
CET0 as(select *,row_number()over(partition by 姓名 order by 日期) rn from #tb)
,CET1 AS (select *,row_number()over(partition by 姓名 order by 日期) rn1
from cet0 where 有问题条数 = 0)
,CET2 as(select *,rn - rn1 as partnum from CET1)
select 姓名,min(日期)as 开始日期,max(日期)as 结束日期, sum(合格条数) 条数
from CET2 group by 姓名, partnum having sum(合格条数) > 1100
/*姓名 开始日期 结束日期 条数
---------- ---------- ---------- -----------
陈杰新 2012-09-02 2012-09-04 1193
陈杰新 2012-09-06 2012-09-09 1416
陈红 2012-09-08 2012-09-10 1777

(3 行受影响)

*/
wj081066 2012-10-12
  • 打赏
  • 举报
回复
[size=12px]造书脚本:[/size]

if OBJECT_ID('tb') is not null drop table tb
go
create table tb
(
ID int,
姓名 nvarchar(10),
生产日期 varchar(10),
合格条数 int,
缺陷条数 int
)
insert into tb
select
1, '陈红', '2012-9-1', 539, 0 union all select
2, '陈红', '2012-9-2', 523, 4 union all select
3, '陈红', '2012-9-3', 1080, 5 union all select
4, '陈红', '2012-9-4', 570, 0 union all select
5, '陈红', '2012-9-5', 514, 0 union all select
6, '陈红', '2012-9-6', 574, 1 union all select
7, '陈红', '2012-9-7', 545, 12 union all select
8, '陈红', '2012-9-8', 556, 0 union all select
9, '陈红', '2012-9-9', 597, 0 union all select
10, '陈红', '2012-9-10', 624, 0 union all select
1, '陈杰新', '2012-9-1',445, 3 union all select
2, '陈杰新', '2012-9-2', 436, 0 union all select
3, '陈杰新', '2012-9-3', 443, 0 union all select
4, '陈杰新', '2012-9-4', 314, 0 union all select
5, '陈杰新', '2012-9-5', 471, 3 union all select
6, '陈杰新', '2012-9-6', 447, 0 union all select
7, '陈杰新', '2012-9-7', 472, 0 union all select
8, '陈杰新', '2012-9-9', 497, 0 union all select
9, '陈杰新', '2012-9-12', 500, 2 union all select
10, '陈杰新', '2012-9-13', 475, 0 union all select
11, '陈杰新', '2012-9-14', 435, 2 union all select
1, '崔兵强', '2012-9-1', 464, 4 union all select
2, '崔兵强', '2012-9-3', 478, 0 union all select
3, '崔兵强', '2012-9-4', 520, 0 union all select
4, '崔兵强', '2012-9-5', 559, 2;
發糞塗牆 2012-10-12
  • 打赏
  • 举报
回复
我等有人给出造数脚本我在看

22,210

社区成员

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

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