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
问题已解决。我没有按年份对其进行分组。是这样做的。