Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果当前行值为空,则取上一行值_Mysql - Fatal编程技术网

Mysql 如果当前行值为空,则取上一行值

Mysql 如果当前行值为空,则取上一行值,mysql,Mysql,我有一张有钱包交易的桌子。使用此表中的数据,我需要获得每个月每个钱包的余额信息。 月份列表必须根据同一表中的交易日期定义。所以,如果第一笔交易发生在2012年1月14日23:44:12,最后一笔交易发生在本月(2015年10月),我应该有如下的年度月份列表: 2012-01 2012-02 2012-03 ... 2015-10 Month | Wallet | Balance 2012-01 | 234 | 111.10 2012-02 | 234 | 45.29 2012-

我有一张有钱包交易的桌子。使用此表中的数据,我需要获得每个月每个钱包的余额信息。 月份列表必须根据同一表中的交易日期定义。所以,如果第一笔交易发生在2012年1月14日23:44:12,最后一笔交易发生在本月(2015年10月),我应该有如下的年度月份列表:

2012-01
2012-02
2012-03
...
2015-10
Month | Wallet | Balance 2012-01 | 234 | 111.10 2012-02 | 234 | 45.29 2012-03 | 234 | 45.29 (no transaction in 2012-03, so take value from prev month) 2012-04 | 234 | 45.29 (no transaction in 2012-04, so take value from prev month) 2012-05 | 234 | 45.29 (no transaction in 2012-05, so take value from prev month) 2012-06 | 234 | 45.29 (no transaction in 2012-06, so take value from prev month) 2012-07 | 234 | 14.32 (new transaction in 2012-07, so calculate new value) Month | Wallet | Balance 2012-01 | 234 | 111.10 2012-02 | 234 | 45.29 2012-07 | 234 | 14.32 要获取可用的年-月组合列表,我使用下一个子查询:

SELECT DISTINCT DATE_FORMAT( `created` , '%Y-%m' ) AS `d` FROM `transactions`
这应该足够好了,因为我确信每个月至少有一笔交易(不是每个钱包,而是共同的)

我需要实现的是——列出每个可用月份+钱包id+当月最大余额的组合。若在某个特定的月份,钱包并没有交易,我需要从上个月的余额。因此,结果数据必须如下所示:

2012-01
2012-02
2012-03
...
2015-10
Month | Wallet | Balance 2012-01 | 234 | 111.10 2012-02 | 234 | 45.29 2012-03 | 234 | 45.29 (no transaction in 2012-03, so take value from prev month) 2012-04 | 234 | 45.29 (no transaction in 2012-04, so take value from prev month) 2012-05 | 234 | 45.29 (no transaction in 2012-05, so take value from prev month) 2012-06 | 234 | 45.29 (no transaction in 2012-06, so take value from prev month) 2012-07 | 234 | 14.32 (new transaction in 2012-07, so calculate new value) Month | Wallet | Balance 2012-01 | 234 | 111.10 2012-02 | 234 | 45.29 2012-07 | 234 | 14.32 到目前为止,我甚至在获取所有可用年-月+钱包id+余额的列表时遇到问题,如果本月没有此钱包的交易,则余额为空。所以现在我希望至少有这样的列表(与上表相比,我最终需要得到):

但现在,所有那个些并没有钱包交易的月份都被错过了。所以我有这样的想法:

2012-01
2012-02
2012-03
...
2015-10
Month | Wallet | Balance 2012-01 | 234 | 111.10 2012-02 | 234 | 45.29 2012-03 | 234 | 45.29 (no transaction in 2012-03, so take value from prev month) 2012-04 | 234 | 45.29 (no transaction in 2012-04, so take value from prev month) 2012-05 | 234 | 45.29 (no transaction in 2012-05, so take value from prev month) 2012-06 | 234 | 45.29 (no transaction in 2012-06, so take value from prev month) 2012-07 | 234 | 14.32 (new transaction in 2012-07, so calculate new value) Month | Wallet | Balance 2012-01 | 234 | 111.10 2012-02 | 234 | 45.29 2012-07 | 234 | 14.32 月|钱包|余额 2012-01 | 234 | 111.10 2012-02 | 234 | 45.29 2012-07 | 234 | 14.32 如何修改查询以在我需要的视图中获取列表

更好的是,如何实现我的最终目标,所有月份和空余额将被前一行的值替换


重要的一点是,我将使用查询结果作为一种视图(实际上是BI工具中的派生表)。

生成序列

据我所知,您需要mysql中的行生成器,但只有一个。看

在以下位置尝试“生成_系列”程序:

搜索现有数据库中的月份序列


作为替代解决方案,我会在DB中找到一种方法来存储每个月的值(这样就不必生成月序列)。如果你没有太多的插入,你可以做一个触发器,检查是否有前几个月的数据,如果是空的,则创建空事务。

可能重复@vhu,但我也无法获得余额为空的列表,所以答案只能解决我的部分问题。还必须说,我将使用查询结果作为视图,这种解决方案在这种情况下有效吗?