在MySQL中计算未付金额

在MySQL中计算未付金额,mysql,select,Mysql,Select,我对MySQL中的SELECT命令有问题。我有一个每天交易的证券数据库,到期日从1天到1000天>100万行。我想得到每天和每个类别的未付金额。举个例子,假设这是我的初始数据集: DATE VALUE MATURITY 1 10 3 1 15 2 2 10 1 3 5 1 我想得到以下输出 DATE OUTSTANDING_AMOUNT 1 25 2

我对MySQL中的SELECT命令有问题。我有一个每天交易的证券数据库,到期日从1天到1000天>100万行。我想得到每天和每个类别的未付金额。举个例子,假设这是我的初始数据集:

DATE    VALUE    MATURITY
1       10       3       
1       15       2
2       10       1
3       5        1
我想得到以下输出

DATE    OUTSTANDING_AMOUNT
1       25
2       35
3       15
未偿付金额计算为仍“活着”的证券交易总额。这就是说,在第2天,有一个新的10号交易所和两个旧的10号和15号交易所仍然未偿付,因为它们的到期日超过一天,第2天的未偿付总额为35。在第3天,有一个新的交换5和旧的交换从第1天的10。即未付金额的15%

这里有一个更直观的解释:

Monday      Tuesday     Wednesday
10          10          10             (Day 1, Value 10, matures in 3 days)
15          15                         (Day 1, 15, 2 days)
            10                         (Day 2, 10, 1 day)
                        5              (Day 3, 5, 3 days with remainder not shown)
-------------------------------------
25          35          15             (Outstanding amount on each day)

有没有一个简单的方法可以得到这个结果?

我不确定这是否是你想要的,也许如果你能提供更多的细节

select
   DATE
   ,sum(VALUE) as OUTSTANDING_AMOUNT
from
  NameOfYourTable

group by 
   DATE
Order by
   DATE

我希望这会有所帮助

我不确定这是否是您想要的,也许您可以提供更多细节

select
   DATE
   ,sum(VALUE) as OUTSTANDING_AMOUNT
from
  NameOfYourTable

group by 
   DATE
Order by
   DATE

我希望这有助于

每个日期都考虑将每一行包含在价值总和中

SELECT d.DATE, SUM(m.VALUE) AS OUTSTANDING_AMOUNT
FROM yourTable AS d JOIN yourtable AS m ON d.DATE >= m.MATURITY
GROUP BY d.DATE
ORDER BY d.DATE

每个日期都考虑将每一行包含在值的总和中

SELECT d.DATE, SUM(m.VALUE) AS OUTSTANDING_AMOUNT
FROM yourTable AS d JOIN yourtable AS m ON d.DATE >= m.MATURITY
GROUP BY d.DATE
ORDER BY d.DATE

首先,在主子查询中,我们找到当前日期的所有值的总和。然后,根据第二个子查询的到期日,将以前日期的值添加到它们中


首先,在主子查询中,我们找到当前日期的所有值的总和。然后,根据第二个子查询的到期日,将以前日期的值添加到它们中


一个可能的解决方案是使用理货编号表

SELECT date, SUM(value) outstanding_amount
  FROM
(
  SELECT date + maturity - n.n date, value, maturity
    FROM table1 t JOIN
  (
    SELECT 1 n UNION ALL
    SELECT 2 UNION ALL 
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 
  ) n ON n.n <= maturity
) q
 GROUP BY date
输出:

| DATE | OUTSTANDING_AMOUNT | ----------------------------- | 1 | 25 | | 2 | 35 | | 3 | 15 |
这是一个带有计数表的可能解决方案演示

SELECT date, SUM(value) outstanding_amount
  FROM
(
  SELECT date + maturity - n.n date, value, maturity
    FROM table1 t JOIN
  (
    SELECT 1 n UNION ALL
    SELECT 2 UNION ALL 
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 
  ) n ON n.n <= maturity
) q
 GROUP BY date
输出:

| DATE | OUTSTANDING_AMOUNT | ----------------------------- | 1 | 25 | | 2 | 35 | | 3 | 15 |
这是一个演示

所以到目前为止你都尝试了什么?什么都没有,因为我根本不知道怎么做。我通过使用CASE命令创建了一个“bucket”变量,但这就是我所知道的未付金额是多少?…因为我根本不知道怎么做。。。至少详细解释期望输出与样本数据的相关性,未偿金额是如何计算为仍“有效”的证券交易总额的。这就是说,在第2天,有一个新的10号交易所和两个旧的10号和15号交易所仍然未偿付,因为它们的到期日超过一天,第2天的未偿付总额为35。在第3天,有一个新的交换5和旧的交换从第1天的10。即未付金额的15%。希望这能澄清问题。那么,到目前为止,你做了什么?什么都没做,因为我根本不知道怎么做。我通过使用CASE命令创建了一个“bucket”变量,但这就是我所知道的未付金额是多少?…因为我根本不知道怎么做。。。至少详细解释期望输出与样本数据的相关性,未偿金额是如何计算为仍“有效”的证券交易总额的。这就是说,在第2天,有一个新的10号交易所和两个旧的10号和15号交易所仍然未偿付,因为它们的到期日超过一天,第2天的未偿付总额为35。在第3天,有一个新的交换5和旧的交换从第1天的10。即未付金额的15%。希望这能澄清。