这样的SQL该如何写(求连续的值的和)

[复制链接]
查看11 | 回复8 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
这样的SQL该如何写(求连续的值的和)
t1的date是否连续,是根据t2的值
t1
id
date
value
001
0601
100
001
0602
100
001
0603
100
001
0604
100
001
0606
100
001
0607
100
t2
date
0601
0602
0603
0604
0605
0606
0607
0608
需要的结果是:
id
begindate
enddate
sumValue
001
0601
0604
400
001
0606
0607
200
想知道各位有什么思路?谢谢!
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
up
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
还是写个函数来做比较好
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
你的begindate enddate 从何而来?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
to:biti_rainy
请你提供一些思路,函数该如何写?谢谢!
to:wind666
begindate enddate 就是t1表中的date啊
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
再顶
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
写了个简单的pl/sql,希望对你有用:
DECLARE
V_START VARCHAR2(10);
V_END VARCHAR2(10);
V_IDVARCHAR2(10);
V_SUM NUMBER;
CURSOR C_TEST IS
SELECT T2.*,T1.* FROM T1,T2
WHERE T2.COL1=T1.COL2(+)
ORDER BY COL1;
BEGIN
V_SUM:=0;
FOR CUR_TEST IN C_TEST LOOP

IF CUR_TEST.COL2 IS NOT NULL THEN

V_END:= CUR_TEST.COL2;


IF V_START IS NULL THEN

V_START:=CUR_TEST.COL2;

V_END:=V_START;


V_ID :=CUR_TEST.ID1;

V_SUM:=V_SUM+CUR_TEST.VALUE;

ELSE

V_END:= CUR_TEST.COL2;


V_SUM:=V_SUM+CUR_TEST.VALUE;


END IF;


ELSE

DBMS_OUTPUT.PUT_LINE(V_ID||'-'||V_START||'-'||V_END||'-'||V_SUM);


V_START:=NULL;

V_SUM:=0;

END IF;
END LOOP;
END;
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
谢谢,有没有其它的方法啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行