SQL和HIVE、tableau中的时间函数处理

SQL和HIVE、Tableau中的时间函数处理小技巧

全是工作中遇到的问题,分享给大家是想大家少走弯路、提高工作效率!

1.Tableau :

按月的业绩指标

sum(ifDATETRUNC('month',[v_date])=DATETRUNC('month',[统计年月]) then [业绩指标] else 0 end)

环比

sum(ifDATETRUNC('month',[v_date])=DATETRUNC('month',[统计年月]) then [业绩指标] else 0 end)/sum(ifDATETRUNC('month',[v_date])=DATEADD('month',-1,DATETRUNC('month',[统计年月])) then [业绩指标] else 0 END)-1

sum(ifDATETRUNC('month',[日期])=DATETRUNC('month',[统计日期]) then [业绩指标] else 0 end)/sum(if DATETRUNC('month',[日期])=DATEADD('month',-1,DATETRUNC('month',[统计日期])) then [业绩指标] else 0 END)-1

同比

sum(ifDATETRUNC('month',[v_date])=DATETRUNC('month',[统计年月]) then [业绩指标] else 0 end)/sum(ifDATETRUNC('month',[v_date])=DATEADD('month',-12,DATETRUNC('month',[统计年月])) then [业绩指标] else 0 END)-1


(ifDATETRUNC('month',[日期])=DATETRUNC('month',[统计日期]) then [人效] else 0 end)/(if DATETRUNC('month',[日期])=DATEADD('month',-1,DATETRUNC('month',[统计日期])) then [人效] else 0 END)-1

  

if[部门类型]='KA' THEN 0 ELSE [加权人数] END) else 0 end )

[日期]=MAKEDATE(YEAR([日期]),MONTH([日期]),01) 当月第一天

if  [日期]= MAKEDATE(YEAR([日期]),MONTH([日期]),day(DATEADD('day',-1,MAKEDATE(YEAR(DATEADD('month',1,[日期])),MONTH(DATEADD('month',1,[日期])),01))))then [待摊销金额]

else null

end

 

按月的业绩指标

sum(ifDATETRUNC('month',[v_date])=DATETRUNC('month',[统计年月]) then [业绩指标] else 0 end)

环比

sum(ifDATETRUNC('month',[v_date])=DATETRUNC('month',[统计年月]) then [业绩指标] else 0 end)/sum(ifDATETRUNC('month',[v_date])=DATEADD('month',-1,DATETRUNC('month',[统计年月])) then [业绩指标] else 0 END)-1

SUM(IF [日期]>=DATETRUNC('month',DATEADD('month',0,[统计日期])) AND [日期]

else 0 end )/(

[日期]=MAKEDATE(YEAR([日期]),MONTH([日期]),01) 当月第一天

if  [日期]= MAKEDATE(YEAR([日期]),MONTH([日期]),day(DATEADD('day',-1,MAKEDATE(YEAR(DATEADD('month',1,[日期])),MONTH(DATEADD('month',1,[日期])),01))))then [待摊销金额]

else null

end

 

if[部门类型]='KA' THEN 0 ELSE [加权人数] END) else 0 end )

[日期]=MAKEDATE(YEAR([日期]),MONTH([日期]),01) 当月第一天

if  [日期]= MAKEDATE(YEAR([日期]),MONTH([日期]),day(DATEADD('day',-1,MAKEDATE(YEAR(DATEADD('month',1,[日期])),MONTH(DATEADD('month',1,[日期])),01))))then [待摊销金额]

else null

end


CONTAINS(str([产品ID]),'820201') ##如果 [产品ID] 含有'820201'则为true。


2.SQL(hive):

 ##hive

 v_month>=date(concat(

(case whenint(from_unixtime(unix_timestamp(),'MM'))<2 thenint(from_unixtime(unix_timestamp(),'yyyy'))-2 elseint(from_unixtime(unix_timestamp(),'yyyy'))-1 end),'-',

(case whenint(from_unixtime(unix_timestamp(),'MM'))<2 thenint(from_unixtime(unix_timestamp(),'MM'))+11 elseint(from_unixtime(unix_timestamp(),'MM'))-1 end),'-01'))


where  v_month>=date(concat(substr(ADD_MONTHS(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-13),1,7),'-01')) #前13个月yyyy-MM-dd

regexp_replace(

 substr(ADD_MONTHS(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-24),1,10),'-','') ## 前13个月yyyyMMdd

 

#mysql:

 

DATE(CONCAT(SUBSTR(DATE_ADD(SYSDATE(),INTERVAL-13 MONTH),1,7),'-01')) ##增加月份

查看分区: show partitions +表名

date_add(date,days)##增加天数

current_date() #当前时间

select  v_date  from  ods_ba.o_m_user_account_remain_daily

where(concat(substr(v_date,1,4),'-',substr(v_date,5,2),'-',substr(v_date,7,2)))=last_day((concat(substr(v_date,1,4),'-',substr(v_date,5,2),'-',substr(v_date,7,2))))

group by  v_date ###取每月最后一天

权限表:

增加人员

UPDATE`t_hr_authorization`

SETuser_list=CONCAT(user_list,'junfan,') WHERE business='name'

AND company IN('name1','name2')

##删除人员

UPDATE`t_hr_authorization` 

SET  user_list=REPLACE(user_list,'junfan,','')WHERE business='name'

AND company IN('name1','name2')

 

特别注意相关的数据格式的匹配,在相关数据处理工具中数据格式兼容性会影响ETL.

对于权限的查看,赋予不同的数据权限需要各种数据维表来控制数据权限。


3.R:

数据处理包dplyr,查找最大值的ID:

library(dplyr)

order <-read.csv("order.csv")## 也可以是不同的数据源:mysql,oracle,sqlite,hadoop,

class(order)##查看order的类别

subset.data.frame(order,

                  totalprice >=max(totalprice), ##选出最大价格

                  select = c(orderid,customerid, totalprice)) ##选出最大价格中的orderid, customerid

subset(airquality,Temp > 80, select = c(Ozone, Temp)) 


你可能感兴趣的:(数据分析业务日记)