Mysql 如果当前行值为空,则取上一行值
我有一张有钱包交易的桌子。使用此表中的数据,我需要获得每个月每个钱包的余额信息。 月份列表必须根据同一表中的交易日期定义。所以,如果第一笔交易发生在2012年1月14日23:44:12,最后一笔交易发生在本月(2015年10月),我应该有如下的年度月份列表: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-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,但我也无法获得余额为空的列表,所以答案只能解决我的部分问题。还必须说,我将使用查询结果作为视图,这种解决方案在这种情况下有效吗?