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

深圳专业网站建设制作价格低百度竞价排名背后的伦理问题

深圳专业网站建设制作价格低,百度竞价排名背后的伦理问题,使用wordpress版权,请问那个网站做推广好点1. 需求概述 在分析用户行为时,查询用户的连续登录数据是一个常见需求。例如,我们需要找出每个用户连续三天登录的记录。给定一个包含用户登录记录的表,我们需要对这些数据进行处理,提取出用户连续三天登录的日期。 2. 问题说明…

1. 需求概述

在分析用户行为时,查询用户的连续登录数据是一个常见需求。例如,我们需要找出每个用户连续三天登录的记录。给定一个包含用户登录记录的表,我们需要对这些数据进行处理,提取出用户连续三天登录的日期。

2. 问题说明

假设我们有一个用户登录记录表 user_log,表结构如下:

iddt
12024-04-25
12024-04-26
12024-04-27
12024-04-28
12024-04-30
12024-05-01
12024-05-02
12024-05-04
12024-05-05
22024-04-25
22024-04-28
22024-05-02
22024-05-03
22024-05-04

我们的目标是找出每个用户连续三天登录的所有数据记录,期望的输出结果如下:

iddt
12024-04-25
12024-04-26
12024-04-27
12024-04-28
12024-04-30
12024-05-01
12024-05-02
22024-05-02
22024-05-03
22024-05-04

3. 查询思路

为了完成这个任务,我们可以利用 Hive SQL 的窗口函数来处理这个问题。主要的思路是:

  1. 窗口函数的使用:通过 LEAD() 函数获取当前登录记录的下一天和下两天的日期。
  2. 日期差计算:计算当前日期和下一天、下两天的日期差,判断是否为连续的三天。
  3. 筛选符合条件的数据:最终筛选出满足条件(即连续三天登录)的数据记录。

4. 查询实现

下面是具体的 Hive SQL 查询实现:

with t as (select *, lead(dt,1,dt) over(partition by id order by dt) last_day, lead(dt,2,dt) over(partition by id order by dt) last_2_day from user_log
),
t2 as (select *, datediff(last_2_day, dt) date_diff from t
)
select distinct id, d 
from t2 
lateral view explode(map('dt', dt, 'last_day', last_day, 'last_2_day', last_2_day)) tem as s, d 
where date_diff = 2;

5.代码解析

1. 子查询 t

这个子查询为每个用户的登录记录添加了两列,分别是 last_daylast_2_day,它们表示当前记录的下一天和下两天的登录日期。这里使用了窗口函数 LEAD() 来实现。

  • LEAD(dt, 1, dt):这个窗口函数获取当前行的下一天登录日期。如果下一天不存在,则返回当前日期 dt 作为默认值。
  • LEAD(dt, 2, dt):这个窗口函数获取当前行的下两天登录日期。如果下两天不存在,则返回当前日期 dt 作为默认值。
  • PARTITION BY id:按 id 列(即用户ID)对数据进行分组。
  • ORDER BY dt:按日期排序。

所以,t 子查询的结果将会如下(假设数据表 user_log 的某一部分):

iddtlast_daylast_2_day
12024-04-252024-04-262024-04-27
12024-04-262024-04-272024-04-28
12024-04-272024-04-282024-04-30
12024-04-282024-04-302024-05-01
12024-04-302024-05-012024-05-02
12024-05-012024-05-022024-05-04
12024-05-022024-05-042024-05-05

 

2. 子查询 t2

t2 子查询中,我们计算了日期差 date_diff,它表示 last_2_day 和当前登录日期 dt 之间的天数差。使用了 DATEDIFF() 函数来计算两个日期之间的天数差。

  • DATEDIFF(last_2_day, dt):计算 last_2_day 与当前日期 dt 之间的天数差。

date_diff 为 2 的记录说明 dtlast_2_day 是连续的三天登录。

3. LATERAL VIEW 和 EXPLODE

在查询的外层,使用了 LATERAL VIEWEXPLODE 来对数据进行展平操作,并对每个用户的连续三天登录日期进行处理。

  • LATERAL VIEWLATERAL VIEW 用于展开复杂数据类型(如数组或映射)。在这个查询中,LATERAL VIEW 展开了一个映射(map),每个映射包含了 dtlast_day 和 last_2_day 三个字段。
  • EXPLODE(map(...))EXPLODE 会将一个映射中的每个键值对展开为多行。对于每一行数据,都会根据映射的每个键值对创建一行记录。

map('dt', dt, 'last_day', last_day, 'last_2_day', last_2_day) 创建了一个映射(map),映射的键是 'dt''last_day''last_2_day',值分别是 dtlast_daylast_2_day

这将会生成一个包含每个字段名(dtlast_daylast_2_day)和值的结果行。LATERAL VIEW 使得每一行的键值对都展开为多行数据,因此可以进一步进行查询操作。

4. 查询的最终条件

最后,通过 where date_diff = 2 筛选出符合条件的记录。这意味着我们只选取那些连续三天登录的记录(日期差为 2),并通过 distinct 去重。

5. 查询结果示例

在执行查询后,我们将得到如下结果:

iddt
12024-04-25
12024-04-26
12024-04-27
12024-04-28
12024-04-30
12024-05-01
12024-05-02
22024-05-02
22024-05-03
22024-05-04

 这个结果显示了每个用户连续三天登录的记录,符合我们预期的输出。

 

 

http://www.mmbaike.com/news/75402.html

相关文章:

  • php体育网站模板seo优化排名价格
  • 工作做ppt课件的网站外贸推广
  • 网站建设人员最近国家新闻
  • 扁平 网站 模板如何做好网站推广优化
  • 怎样用记事本做网站怎么样推广自己的公司
  • 网站建设最基础的是什么意思市场营销方案范文5篇
  • 如何做网站小编百度推广怎么收费的
  • 做分类网站用什么cms找关键词
  • 企业名录下载专业网站优化培训
  • 收集链接 做网站南昌seo
  • 微信小程序研发seo信息查询
  • 网站改版建设情况的汇报小红书推广
  • 广州高端网站建设今日新闻消息
  • 本地拖拽网站建设seo技术
  • 没有网站可以做网络推广吗热狗seo外包
  • 南平网站建设站长工具域名
  • 12建网站网站seo诊断优化方案
  • 玉溪做网站建设的公司上海网络营销seo
  • 网站制作呼和浩特二级域名免费申请
  • wordpress文章下载美化框aso优化榜单
  • wordpress 端口修改seo网络推广机构
  • 成品网站建设哪家好网络推广大概需要多少钱
  • 个人网站可以挂广告吗google关键词推广
  • 网站建设服务器介绍图片怎么在百度推广
  • 站群管理系统推广优化
  • 大的网站建设公司英文外链代发
  • 免费做头像网站steam交易链接怎么改
  • 雄安优秀网站建设方案公众号推广平台
  • 专门做衣服特卖的网站友链交换有什么作用
  • 网站导航css举例说明seo