Hive 在配置单元上分组不同的时间范围

Hive 在配置单元上分组不同的时间范围,hive,hiveql,Hive,Hiveql,我正在尝试执行一个资源效率很高的查询,并给出以下结果: 身份证件 时期 咔哒声 162 60天 123 162 90天 200 7162 60天 127 7162 90天 6718 您可以使用case-when或if和数据复制轻松地完成这项工作。 因此,首先使用rs子查询获取基础数据,在这里计算90d和60d存储桶。 然后,如果数据同时为90d和60d,则生成两行,如果数据仅为90d,则生成一行。 性能方面,它应该比同一张表上的CTE更好,但请彻底测试它 SELECT id,

我正在尝试执行一个资源效率很高的查询,并给出以下结果:

身份证件 时期 咔哒声 162 60天 123 162 90天 200 7162 60天 127 7162 90天 6718
您可以使用case-when或if和数据复制轻松地完成这项工作。 因此,首先使用rs子查询获取基础数据,在这里计算90d和60d存储桶。
然后,如果数据同时为90d和60d,则生成两行,如果数据仅为90d,则生成一行。
性能方面,它应该比同一张表上的CTE更好,但请彻底测试它



SELECT id,
       CASE
           WHEN dummy=0 THEN p1
           WHEN dummy =1 THEN p2
           ELSE NULL
       END AS period,
       clicks
FROM
  (SELECT id,
          CASE
              WHEN `date` BETWEEN date_sub(current_date(), 90) AND current_date() THEN '90d'
          END p1,
          CASE
              WHEN `date` BETWEEN date_sub(current_date(), 60) AND current_date() THEN '60d'
          END p2,
          SUM(clicks) AS clicks
   FROM etl.t99
   WHERE `date` BETWEEN date_sub(current_date(), 90) AND current_date()
   GROUP BY CASE
                WHEN `date` BETWEEN date_sub(current_date(), 90) AND current_date() THEN '90d'
            END ,
            CASE
                WHEN `date` BETWEEN date_sub(current_date(), 60) AND current_date() THEN '60d'
            END ,
            id) rs,

  (SELECT 0 dummy
   UNION SELECT 1 dummy) dummy_table -- This will generate two dummy records

WHERE CASE
          WHEN p1 IS NOT NULL
               AND p2 IS NOT NULL
               AND dummy in (0,
                             1) THEN 1 -- This will generate 90d and 60d

          WHEN p1 IS NOT NULL
               AND p2 IS NULL
               AND dummy =0 THEN 1 -- This will generate only 90

          ELSE 0
      END = 1 
样本数据和结果显示在下图中。