參考
筆者需求:要將a表與b表相關聯,b表是a表的歷史表,且兩表粒度是id 和 月份 month,month的資料型別是yyyy-mm,求如何對兩張表進行關聯
思路 a left join b on a.id = b.id and a.month = b.month + 12個月
轉化為標準語句為
a left
join b on a.id = b.id and a.
month
= from_unixtime(unix_timestamp(add_month(from_unixtime(unix_timestamp(b.
month
,'yyyy_mm'),
'yyyy-mm-dd hh:mm:ss'),
12)'yyyy-mm-dd'),
'yyyy-mm'
)
1.思路解析:
月份前後加減,使用函式,add_month,但是add_month主要有兩種格式:
add_month(
'yyyy-mm-dd'
,n)add_month(
'yyyy-mm-dd hh:mm:ss'
,n)
因此要先將month欄位轉化為add_month使用的格式
① 將b.month欄位解析轉化為時間戳 unix_timestamp(精確到秒,如需精確到毫秒使用current_timestamp)
unix_timestamp(b.month,'yyyy_mm')
②再將是時間戳轉化成字串』yyyy-mm-dd hh:mm:ss』,使用函式 from_unixtime
from_unixtime(unix_timestamp(b.month,'yyyy_mm'),'yyyy-mm-dd hh:mm:ss')
③使用add_month對轉化好的字串進行加減(返回值 yyyy-mm-dd)
add_month(from_unixtime(unix_timestamp(b.
month
,'yyyy_mm'),
'yyyy-mm-dd hh:mm:ss'),
12)
④然後將資料轉化成yyyy-mm的格式,還是①和②的思路,將資料先轉化成時間戳,再進行格式轉變
from_unixtime(unix_timestamp(add_month(from_unixtime(unix_timestamp(b.month,'yyyy_mm'),'yyyy-mm-dd hh:mm:ss'),12)'yyyy-mm-dd'),'yyyy-mm')
不規則月份統計報表的實現
不規則月份統計 如果起始時間是2014 01 10,則將2014 01 10到2014 02 09作為一組,將2014 02 10到2014 03 9作為一組。如果起始時間是2014 01 31,則將2014 02 27作為一組,將2014 02 28到2014 03 30作為一組。集算器 a1 根...
Birt 如何實現不規則月份統計
集算器實現 birt 等報表工具中不規則月份統計 業務報表中,常常需要基於時間段進行分組統計,特別是按月份分組統計。一般情況如果按自然月就簡單了,但有時候也會需要按不規則月份來分組。例如,某企業從 1 月 16 日開始實行某種特殊的 策略或營銷活動,因此以後都想以每月 16 號為界來統計產品銷售情況...
Birt 如何實現不規則月份統計
業務報表中,常常需要基於時間段進行分組統計,特別是按月份分組統計。一般情況如果按自然月就簡單了,但有時候也會需要按不規則月份來分組。例如,某企業從 1 月 16 日開始實行某種特殊的 策略或營銷活動,因此以後都想以每月 16 號為界來統計產品銷售情況。這裡所謂不規則月份就是指 如果起始時間是 201...