Mysql 查找连续两个月数据之间的差异

Mysql 查找连续两个月数据之间的差异,mysql,views,Mysql,Views,我有一个表-月分数,有以下列-1.月2.年3.开始日期-这是记录分数的每个月的第一个日期。4.分数。包含数据的表类似于 “2012年1月”2012-01-02“35” “2012年2月”2012-01-02“65” “2012年3月”2012-01-02“55” “2012年4月”2012-01-02“35” “2012年5月”2012-01-02“55” “2012年6月”2012-01-02“25日” “2012年7月”2012-01-02“85” “2012年8月”2012-01-02“1

我有一个表-月分数,有以下列-

1.月
2.年
3.开始日期-这是记录分数的每个月的第一个日期。
4.分数。

包含数据的表类似于

“2012年1月”2012-01-02“35” “2012年2月”2012-01-02“65” “2012年3月”2012-01-02“55” “2012年4月”2012-01-02“35” “2012年5月”2012-01-02“55” “2012年6月”2012-01-02“25日” “2012年7月”2012-01-02“85” “2012年8月”2012-01-02“105” “2012年9月”2012-01-02“95” “2012年10月”2012-01-02“45” “2012年11月”2012-01-02“85” “2012年12月”2012-01-02“25日” “2013年1月”2012-01-02“65”至

“Dec”“2014”“2012-01-02”“35”

我需要创建一个视图来提取两个连续分数之间的差异,如

“2012年1月”“2012-01-02”“35”“35”
“2012年2月”“2012-01-02”“65”“30”
“2012年3月”“2012-01-02”“55”“-10”“


虽然我可以在一年内这样做,但当年份发生变化时,问题就会出现。

假设
开始日期实际上是每个月的第一个日期,您可以使用自联接:

select t.*, t.score - tprev.score
from table t left join
     table tprev
     on year(t.start_date) * 12 + month(t.start_date) =
        year(tprev.start_date) * 12 + month(tprev.start_date) + 1;

您可以对月份名称执行类似的操作,但逻辑要复杂得多。

表中是否有其他列,例如按顺序排列行的月份号或id?开始日期是唯一的。它是每个月记录数据的第一个日期。它在示例数据中看起来不唯一。它始终具有相同的值。Yo您不需要在mysql中添加月列。您可以从日期获取它。当前我正在使用此查询-选择
t1
year
作为
year
t1
month
作为
month
t1
开始日期
作为
第一个日期
t1
作为
score
分数,(
t1
score
-合并(
t2
score
t1
score
)作为(
t1
t2
和(
t1
year
问题已解决。我没有按年份对其进行分组。是这样做的。