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
endif[部門型別]='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
endcontains(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))
SQL 資料和表
1 mysql服務的啟動 net start mysql 2 登陸mysql 鍵入命令mysql u root p,回車提示你輸入password,鍵入12345,回車即可進入到mysql,mysql的提示符是 mysql 3 建立資料庫 create database database name ...
動態sql和分頁
1.mybatis動態sql 1.1 if 1.2 trim 1.3 foreach 1.4 其他 choose set where2.模糊查詢 3種方式 2.1 引數中直接加入 2.2 使用 代替 不建議使用該方式,有sql注入風險 關鍵 與 區別?引數型別為字串,會在前後加單引號 則直接插入值 ...
關係模型和SQL
為了介紹關係模型,以mysql資料庫為例.安裝mariadb sql是結構化查詢語言structured query language.1987年被iso組織標準化.所有主流的關係型資料庫都支援sql,nosql也有很大一部分支援sql.sql語句分為 語言規範 sql語句大小寫不敏感 sql語句末...