我正在尝试使用表格中的牵引日期带来特定的季度数(8)。日期格式为YYYYMMDD
我可以编写一个select using case来根据当前月份显示特定的季度。
我可以使用trunc函数找到月初,但找不到逻辑来带来最后8个季度的数据
发布于 2017-07-02 16:57:18
首先将日期转换为配置单元格式。然后使用DENSE_RANK()按季度对行进行编号(按年排序和按季度排序),然后按rnk<=8过滤:
select * from
(
--calculate DENSE_RANK
select s.*, DENSE_RANK() over(order by year(your_date) desc, quarter(your_date) desc) as rnk
from
(
--convert date to YYYY-MM-DD format
select t.*, from_unixtime(unix_timestamp(),'yyyyMMdd') your_date
from table_name t
--Also restrict your dataset to select only few last years here
--because you do not need to scan all data
--so add WHERE clause here
)s
)s where rnk<=8;请参阅此处的函数手册:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
您可以在了解数据和表的分区方式的情况下优化此查询,限制数据集。如果您需要查询每个键的最近8个季度,还需要在over()中添加partition by子句。
https://stackoverflow.com/questions/44839208
复制相似问题