Sql 如何在配置单元中将DAYOFWEEK和WeeOfYear转换为日期
我正试图通过分组来计算蜂巢中数周内发生的事件。我想知道的是一年中每个星期六的日期(输出只需要返回我们有数据的几周的结果)和前一周发生的事件数(即,Sql 如何在配置单元中将DAYOFWEEK和WeeOfYear转换为日期,sql,hive,Sql,Hive,我正试图通过分组来计算蜂巢中数周内发生的事件。我想知道的是一年中每个星期六的日期(输出只需要返回我们有数据的几周的结果)和前一周发生的事件数(即,num_events列应该是从周日到周六的事件总数) 所需输出示例: +------------+------------+ | ymd_date | num_events | +------------+------------+ | 2016-01-09 | 42 | | 2016-01-16 | 500 | |
num_events
列应该是从周日到周六的事件总数)
所需输出示例:
+------------+------------+
| ymd_date | num_events |
+------------+------------+
| 2016-01-09 | 42 |
| 2016-01-16 | 500 |
| 2016-01-23 | 1090 |
| . | . |
| . | . |
| . | . |
| 2016-12-31 | 23125 |
+------------+------------+
但我不知道如何从WEEKOFYEAR
转换为每个星期六的日期
到目前为止,我所拥有的:
SELECT
concat_ws('-', cast(YEAR(FROM_UNIXTIME(time))as string),
lpad(cast(MONTH(FROM_UNIXTIME(time))as string), 2, '0'),
cast(WEEKOFYEAR(FROM_UNIXTIME(time))as string)) as ymd_date,
COUNT(*) as num_events
FROM
mytable
GROUP BY
concat_ws('-', cast(YEAR(FROM_UNIXTIME(time))as string),
lpad(cast(MONTH(FROM_UNIXTIME(time))as string), 2, '0'),
cast(WEEKOFYEAR(FROM_UNIXTIME(time))as string))
ORDER BY
ymd_date
电流输出示例:
+------------+------------+
| ymd_date | num_events |
+------------+------------+
| 2016-01-1 | 42 |
| 2016-01-2 | 500 |
| 2016-01-3 | 1090 |
| . | . |
| . | . |
| . | . |
| 2016-12-52 | 23125 |
+------------+------------+
我想到目前为止我所知道的都差不多了,但是日期(ymd_date列)显示的是年-月-周-年,而不是年-月-日
关于如何制作每周的yyyy-mm-dd
有什么想法吗
date_sub(next_day(from_unixtime (time),'SAT'),7)
源数据是什么样子的?一组事件,所有事件都有一个unix时间戳
select date_sub(next_day(from_unixtime(time),'SAT'),7) as ymd_date
,count(*) as num_events
from mytable
group by date_sub(next_day(from_unixtime(time),'SAT'),7)
order by ymd_date
hive> select date_sub(next_day(from_unixtime(unix_timestamp()),'SAT'),7);
OK
2016-12-17