我的数据集如下:
1 | 2017年3月1日| 10
1个| 2017年3月2日| 11个
1个| 2017年3月3日| 12个
1个| 2017年3月4日| 13个
1个| 2017年3月5日| 14个
1个| 2017年3月6日| 15个
1个| 2017年3月7日| 16个
2个| 2017年3月2日| 20个
2个| 2017年3月4日| 13个
2个| 2017年3月5日| 14个
3个| 2017年3月2日| 5个
3个| 2017年3月3日| 6个
3个| 2017年3月5日| 7个
3个| 2017年3月6日| 8个
3个| 2017年3月7日| 9个
4个| 2017年3月1日| 10个
4个| 2017年3月2日| 11个
4个| 2017年3月3日| 12个
4个| 2017年3月4日| 13个
4个| 2017年3月5日| 14个
4个| 2017年3月6日| 15个
4个| 2017年3月7日| 16个
1个| 2017年3月8日| 20个
1个| 2017年3月9日| 21个
1个| 2017年3月10日| 22个
1个| 2017年3月11日| 23个
1个| 2017年3月12日| 24个
1个| 2017年3月13日| 25个
1个| 2017年3月14日| 26个
2个| 2017年3月8日| 30个
2个| 2017年3月9日| 31个
2个| 2017年3月10日| 32个
2个| 2017年3月11日| 33个
2个| 2017年3月12日| 34个
2个| 2017年3月13日| 35个
2个| 2017年3月14日| 36个
3个| 2017年3月8日| 30个
3个| 2017年3月9日| 31个
3个| 2017年3月12日| 34个
3个| 2017年3月14日| 36个
4个| 2017年3月8日| 20个
4个| 2017年3月9日| 21个
4个| 2017年3月10日| 22个
4个| 2017年3月11日| 23个
4个| 2017年3月12日| 24个
4个| 2017年3月13日| 25个
4 | 2017年3月14日| 26
我希望以排除较小日期OR_QANTITY的方式对OR_QUANTITY求和,并且sum将用于相同的PIC_NUMBER。
示例结果集是:
1 | 2017年3月1日| 252
1个| 2017年3月2日| 242个
1个| 2017年3月3日| 231个
1个| 2017年3月4日| 219个
1个| 2017年3月5日| 206个
1个| 2017年3月6日| 192个
1个| 2017年3月7日| 177个
2个| 2017年3月2日| 278个
2个| 2017年3月4日| 258个
2个| 2017年3月5日| 245个
3个| 2017年3月2日| 166个
3个| 2017年3月3日| 161个
3个| 2017年3月5日| 155个
3个| 2017年3月6日| 148个
3个| 2017年3月7日| 140个
4个| 2017年3月1日| 252个
4个| 2017年3月2日| 242个
4个| 2017年3月3日| 231个
4个| 2017年3月4日| 219个
4个| 2017年3月5日| 206个
4个| 2017年3月6日| 192个
4个| 2017年3月7日| 177个
1个| 2017年3月8日| 161个
1个| 2017年3月9日| 141个
1个| 2017年3月10日| 120个
1个| 2017年3月11日| 98个
1个| 2017年3月12日| 75个
1个| 2017年3月13日| 51个
1个| 2017年3月14日| 26个
2个| 2017年3月8日| 231个
2个| 2017年3月9日| 201个
2个| 2017年3月10日| 170个
2个| 2017年3月11日| 138个
2个| 2017年3月12日| 105个
2个| 2017年3月13日| 71个
2个| 2017年3月14日| 36个
3个| 2017年3月8日| 131个
3个| 2017年3月9日| 101个
3个| 2017年3月12日| 70个
3个| 2017年3月14日| 36个
4个| 2017年3月8日| 161个
4个| 2017年3月9日| 141个
4个| 2017年3月10日| 120个
4个| 2017年3月11日| 98个
4个| 2017年3月12日| 75个
4个| 2017年3月13日| 51个
4 | 2017年3月14日| 26
我们可以在hive中为这个聚合编写递归函数吗?
答案 0 :(得分:1)
这将给出所需的结果
select PIC_NUMBER, val1 , sum(OR_QUANTITY) from
( select a.PIC_NUMBER,a.C_DATE ,OR_QUANTITY,
case when (a.C_DATE >= temp.C_DATE ) then temp.C_DATE ELSE null END as val1
from table_name a , table_name temp
where temp.PIC_NUMBER = a.PIC_NUMBER ) temp1
where val1 is not null
group by PIC_NUMBER ,val1