首先这里以计算费用的同比为例
建表 :表名为 date
说明:(1)time为时间,是varchar类型 (2)cost是金额,varchar类型或date类型
先上SQL语句
结果
解释:
其中这句SQL
(select CONCAT(DATE_ADD(time,INTERVAL 1 YEAR),“”) as time ,cost from date)
的执行结果为:
一、
DATE_ADD是将time列的时间进行加的一个操作,
INTERVAL 1 YEAR:是将time列的时间加一年,
CONCAT:连接,是将加一年生成的新时间,拼接一个空字符串,形成一个新的时间字符串,起别名为 time
二、
通过left join自连接形成虚拟表 别名为t3
t3.time = t1.time 满足此条件的时间只有2021-05-05
此时 t1.cost = 3 并且 t3.cost = 2
在回到上面的SQL语句就可以计算同比了
注意:
这里有一个坑,时间格式必须精确到日期,如果是年月的形式(2021-05)会出错,当然解决办法也有,那就是将time(2021-05)使用CONCAT 随意拼接一个日期变为(2021-05-01)
而如何将拼接完的日期变回年月的格式呢?可以使用date_format
最终结果
个人LeetCode复习,可以在idea中随机获取一道题,再也不需要打开LeetCode官网了
喜欢的朋友随手给个 star 呀