我试图在3年的时间内找到选定月份之前和之后的销售平均值。
有两列,MONTH
和SELECTED_MONTH
。这两种格式都是字符串格式(例如201103
)。我需要在SELECTED_MONTH
中选择特定月份,并在MONTH
中获取该月的上个月和下个月。
例如:我在201103
中有SELECTED_MONTH
。我需要使用该值在MONTH
中获取上一个月和下个月,因此201102
和201104
。
任何帮助将不胜感激。我尝试了不同的方法。我使用HIVE,但即使是SQL中的查询也会有所帮助。
答案 0 :(得分:0)
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'))
生成month
的最后一天的日期。
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
数据类型的列的日期值。