hive同環比實現


select
          a.date
        , a.measure
        , case
                    when b.measure  is null
                              or b.measure=0
                              then null
                              else concat(
                    cast(
                      cast((if(a.measure is null, 0, a.measure)-if(b.measure is null,0,b.measure))*100/b.measure as decimal(10,2))
                     as string)
                  ,'%') end as ratio_column from test_table a left join test_table b on ( to_date(from_unixtime(unix_timestamp(concat(a.date,''),'yyyyMM'),'yyyy-MM-dd HH:mm:ss'))
                          = add_months(to_date(from_unixtime(unix_timestamp(concat(b.date,''),'yyyyMM'),'yyyy-MM-dd HH:mm:ss')),+1) and 1 = 1 )

提醒:

  1.第一個join條件的'yyyyMM'可以根據字段date的具體格式改變,'yyyy-MM-dd HH:mm:ss'不需要改變

  2.該同環比沒有任何分組和匯總,所以一旦date字段有重復值,很容易出現笛卡爾積,解決方案是確保join條件能夠確定一條數據在表中的唯一性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM