首页 > 解决方案 > 根据日期和 N 的增量重新启动行号

问题描述

我有一个表,其中包含我用日期表生成的以下数据

date     day_num (DAY_NUM % 7)
2019-07-09  0   0
2019-07-10  1   1
2019-07-11  2   2
2019-07-12  3   3
2019-07-13  4   4
2019-07-14  5   5
2019-07-15  6   6
2019-07-16  7   0

我基本上想获得一个从 0 重新开始的周数,我需要帮助弄清楚最后一部分

最终输出看起来像这样

date     day_num (DAY_NUM % 7) week num
2019-07-09  0   0        1
2019-07-10  1   1        1
2019-07-11  2   2        1
2019-07-12  3   3        1
2019-07-13  4   4        1
2019-07-14  5   5        1
2019-07-15  6   6        1
2019-07-16  7   0        2

这是我到目前为止的sql

select 
SUB.*,
DAY_NUM%7
FROM(
SELECT 
  DISTINCT 
  id_date,
  row_number() over(order by id_date) -1 as day_num 
FROM schema.date_tbl
WHERE Id_date BETWEEN "2019-07-09" AND date_add("2019-07-09",146)

标签: sqlhive

解决方案


基于您的查询:

select SUB.*, DAY_NUM%7,
       DENSE_RANK() OVER (ORDER BY FLOOR(DAY_NUM / 7)) as weeknum
FROM (SELECT DISTINCT id_date,
             row_number() over(order by id_date) -1 as day_num 
      FROM schema.date_tbl
      WHERE Id_date BETWEEN "2019-07-09" AND date_add("2019-07-09", 146)
     ) x

推荐阅读