1

以下のシナリオがあります

Date     Amount Item 
6/17/08 208  1 
9/24/08  -48     1 
6/15/09  -160    1 
9/23/09  40      1 

同じアイテムについて、最初に累積額が0以下になった日付を取得したいのですが、後で累積額がプラスになった場合は、それがプラスになった日付も取得したいと思います。

Date     Amount Item Cumulative Amount 
6/17/08   208    1   208 
9/24/08  -48     1       160 
6/15/09  -160    1        0 --This date 
9/23/09  40      1        40 --This date 

これを達成する方法について何か提案はありますか?

4

2 に答える 2

0

最初に非正になった日付:

SELECT MIN(t3.Date) AS dateCumAmountTurnsLTEZero
FROM
(SELECT Date, 
 (SELECT SUM(Amount)
  FROM mytable t1
  WHERE t1.Date <= t2.Date) AS cumulativeAmount
 FROM mytable t2) t3
 WHERE t3.cumulativeAmount <= 0

再び陽性になる日付を取得するには、この結果を別のクエリに挿入するか、SQL ですべてを実行したいと仮定すると、少し複雑になります。下記参照:

SELECT MIN(t6.Date)
FROM
(SELECT Date, 
 (SELECT SUM(Amount)
  FROM mytable t4
  WHERE t4.Date <= t5.Date) AS cumulativeAmount
 FROM mytable t5) t6
WHERE t6.cumulativeAmount >= 0
AND t6.Date >
(SELECT MIN(t3.Date)
 FROM
 (SELECT Date, 
  (SELECT SUM(Amount)
   FROM mytable t1
   WHERE t1.Date <= t2.Date) AS cumulativeAmount
  FROM mytable t2) t3
  WHERE t3.cumulativeAmount <= 0)

SQL Fiddle のデモを見る

于 2013-04-17T20:19:10.063 に答える