Hive问题,急!急!急!

表A中有字段:日期(字符串)、店名、收入

怎么写语句得到结果字段:日期、店名、周收入

注:以上周五到本周四为本周时间日期,这是sql的关键问题

如:今天周一,那么本周目前收入为上周五7号到上周日9号,因为今天没过完,所以只算到昨天。

大佬们这个怎么做,很着急。

只能获取T+1的数据,时间段如图

image.png

根据下面 CD20160914 兄弟的提示,我改了下式子:

date_sub(日期,pmod(datediff(日期,'1900-01-08'),7)+3) 

发现问题:

    如果参数日期是本周五到下周一之间的周六和周日,那么得到的是上周五的日期,而不是本周五的日期。比如:参数日期是(周六2022-01-08),那么得到的是上周五的2021-12-31,而不是我需要的本周五2022-01-07(如上截图)。当参数日期是周一的2022-01-10时,得到的时2022-01-07这是对的。

也即是说:

    当参数日期在某一个周五前B,上一个周五A后时,需要得到的是上一个周五日期,当参数日期在某一个周五B后,下一个周五C前,需要得到的是这某一个周五B的日期。

那么这样的逻辑要怎么写???

霜凡 发布于 2022-1-10 17:38 (编辑于 2022-1-12 09:33)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
1
CD20160914Lv8专家互助
发布于2022-1-11 11:13(编辑于 2022-1-12 11:07)

你这个日期是限制是以服务器时间去找上周五到当天前一天的时间吗

还是你录入一个开始的日期,要找它对应的上周五的日期呢。你没有说清楚。。

date_sub('2022-01-10',pmod(datediff('2022-01-10','1900-01-01')+3,7)) AS 周五,

date_add(date_sub('2022-01-10',pmod(datediff('2022-01-10','1900-01-01')+3,7)),6) AS 下周四

  • 霜凡 霜凡(提问者) 服务器时间,固定的sql取上周五到下周四算下周的时间范围,这个sql是用来抽数的,然后进行每周统计
    2022-01-11 14:09 
  • CD20160914 CD20160914 回复 霜凡(提问者) 假如日期正好是周五,或者周四的话,这个怎么取?比如服务器正好是1月14号,那么它的开始与结束怎么算,假如日期是1-13号,它的开始与结束日期又是怎么算的。。。你说一下他们分别的开始与结束时间
    2022-01-11 14:14 
  • 霜凡 霜凡(提问者) 回复 CD20160914 我加了图和说明,你看下
    2022-01-11 15:52 
  • CD20160914 CD20160914 回复 霜凡(提问者) 最上面更新了语句。。。
    2022-01-11 16:18 
  • 学习2 学习2 变为星期几吗?
    2022-01-11 16:32 
最佳回答
0
学习2Lv7见习互助
发布于2022-1-11 09:45
首先要用到sum聚合函数,其次要限定日期
  • 霜凡 霜凡(提问者) 关键是这个日期限定该怎么写
    2022-01-11 10:56 
  • 学习2 学习2 回复 霜凡(提问者) 你的时间是动态时间吧,我给你个提示:to_char(add_days(CURRENT_TIMESTAMP,-7),\'yyyyMMdd\'),SQL中的CURRENT_TIMESTAMP,取的是今天的年月日,利用上面的函数你想往前推几天,就推几天
    2022-01-11 13:06 
  • 霜凡 霜凡(提问者) 回复 学习2 不是往前推几天的问题,而是固定的sql取上周五到下周四算下周的时间范围,这个sql是用来抽数的,然后进行每周统计
    2022-01-11 14:09 
最佳回答
0
peng_chLv6初级互助
发布于2022-1-12 13:34(编辑于 2022-1-12 13:35)

你可以建 一张日历表,

select regexp_replace(date_sub(current_date, 

      pmod(datediff(date_sub(current_date, 1), '2012-01-07'), 7)+1), '-', '')

这个是以周六为起点的,你看下,改下就好了,

  • 3关注人数
  • 915浏览人数
  • 最后回答于:2022-1-12 13:35
    请选择关闭问题的原因
    确定 取消
    返回顶部