現在我有兩個表a 和b 表的簡單結構如下:
a
--------
id sum
1 10
2 20
3 30b
--------
id id_seqno num date
1 1 5 2007/1/1
1 2 4 2007/1/2
1 3 2 2007/1/3
2 1 1 2007/1/5
a中的id和b中的id相關聯。
現在我想得到這麼一個sql語句
使b中的num累加當其和正好大於與之對應的a中sum時b中的日期。
b中的數據是根據日期從小到大排序的。
這的sql語句怎麼寫呢?
還有一個問題,在delphi中我的計算字段是日期類型,我可以直接把日期類型的數據相減賦值給它嗎?
請各位達人幫忙,謝謝。
a
--------
id sum
1 10
2 20
3 30b
--------
id id_seqno num date
1 1 5 2007/1/1
1 2 4 2007/1/2
1 3 2 2007/1/3
2 1 1 2007/1/5
a中的id和b中的id相關聯。
現在我想得到這麼一個sql語句
使b中的num累加當其和正好大於與之對應的a中sum時b中的日期。
b中的數據是根據日期從小到大排序的。
這的sql語句怎麼寫呢?
還有一個問題,在delphi中我的計算字段是日期類型,我可以直接把日期類型的數據相減賦值給它嗎?
請各位達人幫忙,謝謝。
from b
group by id
having sum(num) > (select sum from a where a.id = b.id)oracle 的日期相减的到的是一个以天为单位的数,不是日期类型的。所以不能相减后賦值給它
這樣寫不是我所求的時間
比如表結構如下:
a
----------------
a
--------
id sum
1 10
2 20
3 30b
--------
id id_seqno num date
1 1 5 2007/1/1
1 2 4 2007/1/2
1 3 2 2007/1/3
1 4 2 2007/1/4
2 1 1 2007/1/5我想求的時間是 5+4+2 >10 時的2007/1/3
而不是最大的那個2007/1/4
謝謝。還有什麼其它的方法嗎?
現在就是那條sql語句的問題了。
如何寫呢請各位指點。謝謝。
写个function阿
那該怎麼寫呢?
能不能給個例子?
thank you 。
我下面的方法可以用按照id循检的方式得知,但是这样比较消耗资源。
select xx."id",min(xx."id_seqno") from
(
select b."id",b."id_seqno",sum(b."num") over ( order by b."id",b."id_seqno") as leiji
from b
--指定id值
where b."id"=1
)
xx,
a
where xx.leiji>a."sum" and xx."id"=a."id"
group by xx."id"
最简单的是在b上面设置一个触发器,每次有数据就统计汇总,比较后将相关结果放到另外的表里。
請問誰還有比較好的方法?謝謝
如果我寫一個function在服務器端執行應該怎麼寫這樣的一個function呢
如果我客戶端用delphi開發,在delphi中怎麼樣調用這個function呢?
---------- ----------
1 10
2 20
3 30SQL> select * from b; ID ID_SEQNO NUM S_DATE
---------- ---------- ---------- -------------------
1 1 5 2007-01-01 00:00:00
1 2 4 2007-01-02 00:00:00
1 3 2 2007-01-03 00:00:00
2 1 1 2007-01-05 00:00:00
1 4 2 2007-01-04 00:00:00SQL> select id, num, s_date from b
2 where exists
3 (select 1 from
4 (select a.id, b.id_seqno, b.s_date,
5 row_number()over(partition by a.id order by b.snum - a.sum_id) as
sid
6 from a inner join
7 (select id, id_seqno, num, s_date,
8 sum(num)over(partition by id order by s_date)as snum
9 from b
10 )b on a.id = b.id
11 where b.snum - a.sum_id >= 0
12 ) c
13 where b.id = c.id and b.id_seqno <= c.id_seqno and c.sid = 1)
14 ; ID NUM S_DATE
---------- ---------- -------------------
1 5 2007-01-01 00:00:00
1 4 2007-01-02 00:00:00
1 2 2007-01-03 00:00:00