[英]MySQL calculate delta (difference) from previous upload day data for next 6 months
[英]Calculate previous and next months from date string
我试图找到 3 年跨度内选定月份之前和之后的平均销售额。
有两列, MONTH
和SELECTED_MONTH
。 这两者都采用相同的格式,即字符串(例如201103
)。 我需要在SELECTED_MONTH
选择特定月份并在MONTH
获取该月的上个月和下个月。
例如:我在SELECTED_MONTH
有201103
。 我需要使用该值获取MONTH
201102
和201104
,因此201102
和201104
。
任何帮助,将不胜感激。 我尝试了不同的方法,但都行不通。 我使用 HIVE,但即使在 SQL 中查询也会有所帮助。
MySQL 提供了强大但稍显笨拙的日期算术函数。 函数STR_TO_DATE()
和DATE_FORMAT()
允许将表示为文本字符串的日期转换为 DBMS 的内部DATE
和DATETIME
格式。
如果您的 SQL 表中碰巧有一个文本列,例如,名为month
,文本日期格式为201503
( YYYYmm
),您可以使用 MySQL 日期算法来执行您想要的操作。
STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d')
产生所提及月份的第一天的 DATE。
LAST_DAY(STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d'))
产生month
的最后一天的日期。
STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d') - INTERVAL 1 MONTH
产生上个月第一天的 DATE。
STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d') + INTERVAL 1 MONTH
产生下个月第一天的 DATE。
再进一步,您可以像这样获得上一季度第一天的YYYYmm
格式。
DATE_FORMAT(STR_TO_DATE(CONCAT('201505','01'),'%Y%m%d') - INTERVAL 1 QUARTER, '%Y%m')
在文本字符串日期和内部日期之间转换的麻烦事促使大多数数据库设计人员在具有DATE
数据类型的列内部存储日期值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.