我正试图在SQL(transact sql)中实现一个算法,并且鉴于我目前的能力而发现它很困难。我试图将问题解决到问题。这个算法背后的基本思想是用户正在计划一个月的预算。他们对有多少钱以及何时来来往往有个好主意。这是本月中旬。问题是:根据目前的义务,在这个月的其余时间,账户最糟糕的位置是什么?下面如何在SQL中实现此算法?
例如在看的时候线让我们说
Today = 15th
Util = 17th
B-day = 19th
Cable = 22nd
Wages = 25th
17日该帐户会比今天少$ 150 在19日的帐户将比今天多100美元。 在22日的帐户将比今天少25美元。 25日的账户将比今天多975美元。
所以在这个例子中,查询将返回 - $ 150。
注:我只关心返回的负值。如果它是负面的意味着你有义务,不应该花这笔钱。如果它是积极的,那并不重要。您不能将钱花在您的帐户中。
| | |
| ^ ^ | ^ ^ |
| |Rent(-500) |Phone(-50) | |Util(-150) |Cable(-125) |
-----------------------------------------------------------------------------------
| ^ | ^ ^ |
| |Wages(+1000) | |B-day(+250) |Wages(+1000) |
| | |
Past Today Future
一个简单的表格,我们可以利用这个问题:
create table MoneyFlow
(
fiscalEventID int not null,
value money,
transactionDate date
)
另一种方式来看待它。你如何在SQL中执行以下算法?
Algorithm
Input: Start date, End date
Output: Worst position the account is going to be in in the future.
WorstPosition = 0 //only want worst position if it is negative.
For each date D between start date and end date where a transaction takes place
Position_D = Sum deposits and withdrawls between start date and D
If Position_D < WorstPosition
WorstPosition = Position_D
return WorstPosition
还要说明一点,我使用的数据库的Sybase
让我知道你是否需要澄清的任何细节。谢谢!
荣誉。 – 2009-09-25 16:07:29
顺便说一句,这个问题听起来像它可能是作业。如果是这样,请标记为。 – 2009-09-25 16:16:54
我同意,这会做出好的作业问题。我用“预算”的例子来隐藏大部分讨厌的商业细节。例如,在我正在处理的问题中,月末没有传入。未来空间在上次提款交易日期结束。 此外,我将不得不添加像'预算分类' – Jon 2009-09-25 17:47:54