结构化SQL语句练习
在不使用流程语句(如:if、while...)的情况下写出如下效果:
CREATE TABLE SheBeiRunHuaBiao --润滑设备表
(
F_NAME VARCHAR(50) --润滑名称
,F_DATE DATETIME --润滑日期
,F_CYCLE INT --润滑周期
,F_MARK VARCHAR(10) --润滑标记,已完成,未完成
)
--基础数据
INSERT INTO SheBeiRunHuaBiao(F_NAME,F_DATE,F_CYCLE,F_MARK)
--设备A
SELECT '设备A','2013-09-01',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-03',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-05',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-07',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-09',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-11',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-13',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-15',2,'已完成'
--设备B
SELECT '设备B','2013-09-01',3,'已完成'
UNION ALL
SELECT '设备B','2013-09-04',3,'已完成'
UNION ALL
SELECT '设备B','2013-09-07',3,'已完成'
UNION ALL
SELECT '设备B','2013-09-10',3,'已完成'
UNION ALL
SELECT '设备B','2013-09-13',3,'已完成'
--设备C
SELECT '设备C','2013-09-01',4,'已完成'
UNION ALL
SELECT '设备C','2013-09-05',4,'已完成'
UNION ALL
SELECT '设备C','2013-09-09',4,'已完成'
UNION ALL
SELECT '设备C','2013-09-13',4,'已完成'
--设备D
SELECT '设备D','2013-09-01',5,'已完成'
UNION ALL
SELECT '设备D','2013-09-06',5,'已完成'
UNION ALL
SELECT '设备D','2013-09-11',5,'已完成'
/*
现在要求写出一个存储过程,要求如下
1.该存储过程有两个变量 @BeginDate ,@EndDate,查询出在这两个日期范围内润滑设备表SheBeiRunHuaBiao 的所有记录
2.如果润滑设备表SheBeiRunHuaBiao在@BeginDate 和 @EndDate 没有润滑记录,
需先根据每个设备的最后润滑日期F_DATE+润滑周期F_CYCLE,不断向后循环,
计算出下一个润滑日期,润滑标记F_MARK默认为'未完成'。
现有的记录则查出符合条件的。
比如:要查询 "2013-09-10"到"2013-09-20" 这两个日期范围内润滑设备表SheBeiRunHuaBiao 的所有记录
我们就先看 "设备D" 的信息
在这个范围内,设备D 只有一条记录
'设备D','2013-09-11',5,'已完成'
通过润滑日期F_DATE+润滑周期F_CYCLE,我们可以计算出下一个设备润滑记录
'设备D','2013-09-16',5,'未完成'
以此类推,统计出'设备A','设备B','设备C'在这个时间范围内的所有记录。
*/
过20楼 贴出本菜鸟的SQL~~~ 抛砖引玉 求大神来~~~~~~~~~~~~~~~~~~~~
------解决方案--------------------这个真心的长
------解决方案--------------------貌似可以用CTE实现
楼下写吧。交给唐诗也可以。
------解决方案--------------------围观新版主表演
------解决方案--------------------小F说这个真心难,交给别人吧。
楼下继续,看能到20楼不。。
------解决方案--------------------發糞塗牆 也当观众了,
这个趋势,板板们是都要当观众了
------解决方案--------------------楼主说:过20楼 贴出本菜鸟的SQL~~~ 抛砖引玉 求大神来
不知道各位板板的板砖会不会出来啊,能不能把楼主的玉给引出来呢。
弱弱的问一句,楼主,你现在的条件不变,改为sql2000环境来写,会什么效果呢?
------解决方案--