不規則年月的月份加減

2021-10-24 20:03:27 字數 1367 閱讀 4043

參考

筆者需求:要將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...