在 MySQL 视图中获取上一行的值

Posted

技术标签:

【中文标题】在 MySQL 视图中获取上一行的值【英文标题】:Get previous row's value on a MySQL view 【发布时间】:2013-12-03 14:39:16 【问题描述】:

假设我有这样的事情:

mysql

Date        |   Val   
2013/11/22  |   2     
2013/11/23  |   4     
2013/11/25  |   12    
2013/11/30  |   28    
2013/12/02  |   2     

我需要一个查询来获取另一列“当前”行的值加上前一行的值的总和。 使用示例,结果将是这样的:

Date        |   Value   |  Total
2013/11/22  |   2       |  2
2013/11/23  |   4       |  6          <--- Because 4+2 = 6
2013/11/25  |   12      |  16
2013/11/30  |   28      |  40
2013/12/02  |   2       |  30

问题是我不能使用变量,因为我在视图中。

我该怎么做?

感谢任何帮助。

【问题讨论】:

这在 MySQL 中是不容易做到的(因为它的 SQL 功能有限) 好吧,我想我必须想办法做到这一点 是的,这并不容易,但有可能。现在我通过代理,我不知道为什么这里的人阻止了 sqlfiddle 站点。当我在家时,如果没有人回答你,我会尝试。 @JorgeCampos 好的,非常感谢! @Amber Ahah 是的!我的错,我数了 16 + 28。 【参考方案1】:
SELECT
t.Date,
t.Val,
COALESCE((SELECT Val FROM Table1 sq WHERE sq.Date < t.Date ORDER BY sq.Date DESC LIMIT 1), 0) + t.Val AS whatever
FROM
Table1 t
ORDER BY t.Date
在sqlfiddle 中实时查看它的工作情况

【讨论】:

+1 很好的答案,但是你有两个相等的日期呢(例如 2013/11/25 值 10 和 2013/11/25 值 11)。这只是我在考虑这个问题的答案时想到的一件事:) 好吧,当多个值可能出现在同一日期时,数据库工程师当然必须处理它并使用 auto_increment 列或其他东西来代替日期列。反正OP没有提到这个潜在的问题,所以我不把它当成问题。 我已经创建了我的 API,因此我不能在同一天有多个值。不管怎样,谢谢大家的关心:)

以上是关于在 MySQL 视图中获取上一行的值的主要内容,如果未能解决你的问题,请参考以下文章

SQL 用视图中一行的值填充行

如何在firebase(swift)中获取子节点的值,并将其显示在视图控制器的标签中

在 tkinter 的树视图中选择多行并同时获取它们

如何循环遍历列表视图并从每一行的文本视图中获取文本

我想从 gridview 中拖动一行并将其放在 treeview 上

MySQL-视图