当前位置: 首页 > news >正文

网站突然打不开国际新闻最新消息十条

网站突然打不开,国际新闻最新消息十条,用dreamweaver修改wordpress,做公众号首图的设计网站目录 问题:SQL解答:第一种方式:第二种方式: 问题: 如下为某平台的商品促销数据,字段含义分别为品牌名称、打折开始日期、打折结束日期,现在要计算每个品牌的打折销售天数(注意其中的…

目录

  • 问题:
  • SQL解答:
    • 第一种方式:
    • 第二种方式:

问题:

如下为某平台的商品促销数据,字段含义分别为品牌名称、打折开始日期、打折结束日期,现在要计算每个品牌的打折销售天数(注意其中的交叉日期)。比如vivo的打折销售天数就为17天。


brand   start_date  end_date
xiaomi  2021-06-05  2021-06-09
xiaomi  2021-06-11  2021-06-21
vivo    2021-06-05  2021-06-15
vivo    2021-06-09  2021-06-21 
honor   2021-06-05  2021-06-21 
honor   2021-06-09  2021-06-15
redmi   2021-06-17  2021-06-26
huawei  2021-06-05  2021-06-26
huawei  2021-06-09  2021-06-15
huawei  2021-06-17  2021-06-21

SQL解答:

第一种方式:

根据每个品牌的促销开始时间和结束时间可以得到品牌每天促销的明细数据,然后,按品牌分组,日期去重就可以得到每个品牌打折销售天数。但此种方式适合数据量不大的情况,因为该方法会让数据膨胀的很厉害。

with temp as (select 'xiaomi' as brand   ,'2021-06-05' as start_date,'2021-06-09' as end_dateunion allselect 'xiaomi' as brand   ,'2021-06-11' as start_date,'2021-06-21' as end_dateunion allselect 'vivo' as brand   ,'2021-06-05' as start_date,'2021-06-15' as end_dateunion allselect 'vivo' as brand   ,'2021-06-09' as start_date,'2021-06-21' as end_dateunion all select 'honor' as brand  ,'2021-06-05' as start_date,'2021-06-21' as end_dateunion all select 'honor' as brand  ,'2021-06-09' as start_date,'2021-06-15' as end_dateunion allselect 'honor' as brand  ,'2021-06-17' as start_date,'2021-06-26' as end_dateunion allselect 'huawei' as brand ,'2021-06-05' as start_date,'2021-06-26' as end_dateunion allselect 'huawei' as brand ,'2021-06-09' as start_date,'2021-06-15' as end_dateunion allselect 'huawei' as brand ,'2021-06-17' as start_date,'2021-06-21' as end_date
)select
brand
,count(distinct dt) as dts
from (
selectbrand,start_date,end_date,date_add(start_date,tmp.col_idx) as dt
from temp
lateral VIEW posexplode(split(repeat("#,",datediff(date(end_date), date(start_date))),'#')) tmp AS col_idx,col_val
) tt 
group by brand
;

备注:补充repeat函数

select  repeat("#,",datediff('2023-12-18','2023-12-01'))	
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,select  split(repeat("#,",datediff('2023-12-18','2023-12-01')),'#')
["",",",",",",",",",",",",",",",",",",",",",",",",",",",",",",",",",","]

第二种方式:

第二种方式规避数据膨胀的情况,经过适当的处理,消除日期交叉的情况

with temp as (select 'xiaomi' as brand   ,'2021-06-05' as start_date,'2021-06-09' as end_dateunion allselect 'xiaomi' as brand   ,'2021-06-11' as start_date,'2021-06-21' as end_dateunion allselect 'vivo' as brand   ,'2021-06-05' as start_date,'2021-06-15' as end_dateunion allselect 'vivo' as brand   ,'2021-06-09' as start_date,'2021-06-21' as end_dateunion all select 'honor' as brand  ,'2021-06-05' as start_date,'2021-06-21' as end_dateunion all select 'honor' as brand  ,'2021-06-09' as start_date,'2021-06-15' as end_dateunion allselect 'honor' as brand  ,'2021-06-17' as start_date,'2021-06-26' as end_dateunion allselect 'huawei' as brand ,'2021-06-05' as start_date,'2021-06-26' as end_dateunion allselect 'huawei' as brand ,'2021-06-09' as start_date,'2021-06-15' as end_dateunion allselect 'huawei' as brand ,'2021-06-17' as start_date,'2021-06-21' as end_date
)select
brand
,sum(datediff(date(end_date),date(start_date))+1)
from
(
selectbrand,casewhen start_date<=max_date then date_add(date(max_date),1)else start_date endas start_date,end_datefrom(selectbrand,start_date,end_date,max(end_date) over(partition by brand order by start_date rows between UNBOUNDED PRECEDING and 1 PRECEDING ) as max_date  --获取同一品牌内按开始日期排序后,取第一行到前一行的最大结束时间from temp)t1)t1
where end_date>=start_date
group by brand
;

补充:rows 和range的区别
在 SQL 中,rows 和 range 是两种不同的窗口帧(window frame)类型,它们定义了窗口函数的计算范围。
rows 窗口帧是基于行的,它使用一组相对于当前行的行号来定义窗口函数的计算范围。rows 窗口帧可以指定 UNBOUNDED PRECEDING、n PRECEDING、CURRENT ROW、n FOLLOWING 和 UNBOUNDED FOLLOWING 五种窗口帧范围。
range 窗口帧是基于值的,它使用一组相对于当前行的数值范围来定义窗口函数的计算范围。range 窗口帧可以指定 UNBOUNDED PRECEDING、n PRECEDING、CURRENT ROW、n FOLLOWING 和 UNBOUNDED FOLLOWING 五种窗口帧范围。
在这里插入图片描述
注释:
PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点
UNBOUNDED PRECEDING 表示从前面的起点
UNBOUNDED FOLLOWING:表示到后面的终点

一般来说,rows 和 range 窗口帧都可以用于定义窗口函数的计算范围,但是它们有一些不同的特点:rows 窗口帧是基于行的,它使用一组相对于当前行的行号来定义窗口函数的计算范围。因此,rows 窗口帧适用于基于行号的计算,例如计算排名、移动平均等。range 窗口帧是基于值的,它使用一组相对于当前行的数值范围来定义窗口函数的计算范围。因此,range 窗口帧适用于基于数值范围的计算,例如计算累计和、百分比等。

一般情况下,rows 窗口帧比 range 窗口帧更常用,因为基于行号的计算更加常见。但是在某些特殊情况下,range 窗口帧也可以使用。
例如:当窗口函数的计算范围基于连续的数值范围时,可以使用 range 窗口帧。例如,计算累计和、计算百分比等。当窗口函数的计算范围包含重复的值时,可以使用 range 窗口帧来避免重复计算。例如,计算连续相同值的最大长度、计算某个值在窗口中的出现次数等。
需要注意的是,对于一些特殊的窗口函数,可能只能使用 rows 窗口帧,例如计算排名、计算移动平均等。因此,在使用 range 窗口帧时,需要根据具体的需求和窗口函数的特性选择合适的窗口帧类型。

http://www.qdjiajiao.com/news/654.html

相关文章:

  • 吉利汽车新能源品牌深圳优化网站
  • 临沂网站公司网站如何推广运营
  • wordpress 添加侧边栏seo怎么做优化排名
  • 龙口网站制作天津网站seo设计
  • 网站开发的合同编写广告软文怎么写
  • 更改host文件把淘宝指向自己做的钓鱼网站短视频seo是什么
  • 地产平面网站软文怎么写
  • 网站数据流程ios微信上的pdf乱码
  • 铁岭网站建设seo提高关键词
  • 网站做icp备案有哪些好处百度关键词优化方法
  • 新乡网站建设那家好市场营销培训
  • 湖南商城网站建设百度竞价推广登录
  • 商标被注册了做网站苏州做网站的专业公司
  • 水贝网站建设亚马逊跨境电商
  • 做外贸批发有哪些网站快速优化seo
  • 深圳建设银行分行网站搜索引擎收录
  • 宁波seo排名优化教程长沙专业seo优化推荐
  • 大作业做网站优化网络培训
  • 粘土做龙网站视频镇江网站建设制作公司
  • 论坛系统杭州网络排名优化
  • 国外效果做的好的网站磁力搜索神器
  • 青海做网站哪家好sem账户托管
  • 江苏亿之盛建设有限公司网站b2b免费发布信息平台
  • 秀洲区建设中心小学网站如何进行电子商务网站推广
  • 安江县政府网站建设方案培训机构优化
  • 提供网站建设课程设计对网络营销的理解
  • 做信公众号首图的网站中国万网登录入口
  • 石嘴山住房和城乡建设厅网站东莞有哪些做推广的网站
  • 网站建设彩票网品牌策划方案
  • 资阳做网站在线识别图片来源