我正试图找到3年内选定月份前后的销售平均值。
共有两列,MONTH
和SELECTED_MONTH
。两者的格式相同,即字符串(例如201103
)。我需要在SELECTED_MONTH
中选择特定的月份,并在MONTH
中获得该月份的上个月和下个月。
例如:我在SELECTED_MONTH
中有201103
。我需要使用该值在MONTH
中获得上个月和下个月,因此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')
生成所述月份的第一天的日期。
LAST_DAY(STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d'))
产生CCD_ 18的最后一天的日期。
STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d') - INTERVAL 1 MONTH
产生上个月的第一天的日期。
STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d') + INTERVAL 1 MONTH
生成下个月的第一天的日期。
再进一步,您可以获得上一季度第一天的YYYYmm
格式,如下所示。
DATE_FORMAT(STR_TO_DATE(CONCAT('201505','01'),'%Y%m%d') - INTERVAL 1 QUARTER, '%Y%m')
在文本字符串日期和内部日期之间转换的猴子式业务促使大多数数据库设计人员在具有DATE
数据类型的列内部存储日期值。