在MySQL中计算未付金额
我对MySQL中的SELECT命令有问题。我有一个每天交易的证券数据库,到期日从1天到1000天>100万行。我想得到每天和每个类别的未付金额。举个例子,假设这是我的初始数据集:在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
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%。希望这能澄清。