大家好,有个问题想请教下,我用的是Oracle数据库,需求如下:
假设我有张表DetectionRate(缺陷率),表里有字段Error(缺陷),CjQty(抽检数量),NotOKQty(不合格数),Tdate(时间)。
如何去实现:假设日期从2009-01-01至2010—01-01这段时间内(这个时间段是可变的,也就是某个时间段内),日期间隔N天,查询出Error(缺陷)的不合格率。
这里的日期间隔N天是这样解释的,就是说以上时间段内(2009-01-01至2010—01-01),假设日期间隔是10天,也就是说2009—01—01至2009—01—10这个时间段内Error(缺陷)
的不合格率(不合格数/抽检数),以此类推2009—01—11至2009—01—20,2009—01—21至2009—01—30.我建张表好理解一点,如下表:
假设初始表:
Error CjQty NotOKQty Tdate
装配件错误 300 5 2009-01-01
装配件错误 350 7 2009-01-05
装配件错误 400 8 2009-01-10
装配件错误 400 2 2009-01-15
装配件错误 350 5 2009-01-20按需求得到后的表是: Error Rate Mdate
装配件错误 20/1050 2009-01-01至2009-01-10
装配件错误 7/750 2009-01-11至2009-01-20这个不合格率就是在日期间隔interval内,总的不合格数/总的抽检数*100%,以上的Rate为了显示效果没算出百分率来。总的来说就是有三个参数,
日期自dateFrom,日期至dateTo,日期间隔interval来写个存储过程,希望大家能帮小弟个忙,刚学存储过程不是很熟悉,谢谢大家了!
假设我有张表DetectionRate(缺陷率),表里有字段Error(缺陷),CjQty(抽检数量),NotOKQty(不合格数),Tdate(时间)。
如何去实现:假设日期从2009-01-01至2010—01-01这段时间内(这个时间段是可变的,也就是某个时间段内),日期间隔N天,查询出Error(缺陷)的不合格率。
这里的日期间隔N天是这样解释的,就是说以上时间段内(2009-01-01至2010—01-01),假设日期间隔是10天,也就是说2009—01—01至2009—01—10这个时间段内Error(缺陷)
的不合格率(不合格数/抽检数),以此类推2009—01—11至2009—01—20,2009—01—21至2009—01—30.我建张表好理解一点,如下表:
假设初始表:
Error CjQty NotOKQty Tdate
装配件错误 300 5 2009-01-01
装配件错误 350 7 2009-01-05
装配件错误 400 8 2009-01-10
装配件错误 400 2 2009-01-15
装配件错误 350 5 2009-01-20按需求得到后的表是: Error Rate Mdate
装配件错误 20/1050 2009-01-01至2009-01-10
装配件错误 7/750 2009-01-11至2009-01-20这个不合格率就是在日期间隔interval内,总的不合格数/总的抽检数*100%,以上的Rate为了显示效果没算出百分率来。总的来说就是有三个参数,
日期自dateFrom,日期至dateTo,日期间隔interval来写个存储过程,希望大家能帮小弟个忙,刚学存储过程不是很熟悉,谢谢大家了!
fromDate date;
toData date;
interval number(10);
begin
insert into afterTable
select *
from table1
where tdate between fromDate and toDate
and fromDate - toDate < interval
end;
select *
from table1
where tdate between fromDate and toDate
and fromDate - toDate < interval 只能查询到表中的数据,不能够整合数据
也许在取整这里还得再调整下SELECT ERROR,
TO_DATE('2009-01-1', 'yyyy-mm-dd') + (AA - 1) * 10 自,
TO_DATE('2009-01-1', 'yyyy-mm-dd') + AA * 10 至,
BB,
CC
FROM (SELECT ERROR,
CEIL((TDATE - TO_DATE('2009-01-01', 'yyyy-mm-dd') + 1) / 10) AA,
SUM(NOTOKQYT) BB,
SUM(CJQTY) CC
FROM RATE
WHERE TDATE BETWEEN TO_DATE('2009-01-01', 'yyyy-mm-dd') AND
TO_DATE('2009-07-05', 'yyyy-mm-dd')
GROUP BY ERROR,
CEIL((TDATE - TO_DATE('2009-01-01', 'yyyy-mm-dd') + 1) / 10));
create or replace procedure getRate(datebegin date,dateend date,interval integer,RESULT OUT sys_refcursor) is
begin
OPEN RESULT FOR
SELECT ERROR,
datebegin + (AA - 1) * interval 自,
datebegin + AA * interval 至,
BB,
CC
FROM (SELECT ERROR,
CEIL((TDATE - datebegin + 1) / interval) AA,
SUM(NOTOKQYT) BB,
SUM(CJQTY) CC
FROM RATE
WHERE TDATE BETWEEN datebegin AND
dateend
GROUP BY ERROR,
CEIL((TDATE - datebegin + 1) / interval));
end getRate;