获取每个访客的第一条访问日志(获取网站的UV)

-- 获取每个访客的第一条访问日志,初始化每个访客的第一个访问日志,计算UV

CREATE TABLE access_log_first (

id BIGINT,

ip STRING,

province STRING,

city STRING,

isp STRING,

access_time STRING,

access_hour STRING,

url STRING,

status STRING,

traffic STRING,

referer STRING,

ref_type STRING,

c_info STRING,

client_type STRING,

client_browser STRING

);


INSERT OVERWRITE TABLE access_log_first

SELECT a.id, a.ip, a.province, a.city, a.isp

, a.access_time, a.access_hour,a.url, a.status, a.traffic

, a.referer,a.ref_type, a.c_info, a.client_type, a.client_browser

FROM access_log a

JOIN (

SELECT c.ip,MIN(c.id) AS id

FROM access_log c

GROUP BY c.ip,c.c_info

) b

ON a.ip = b.ip

AND a.id = b.id;

这段 SQL 语句的作用是将满足特定条件的数据插入到名为access_log_first的表中。

具体解释如下:

一、整体结构

sql

INSERT OVERWRITE TABLE access_log_first SELECT... FROM access_log a JOIN... ON...;

这是一个标准的INSERT OVERWRITE语句结构,用于覆盖目标表中的数据。首先指定目标表为access_log_first,然后通过SELECT子句选择要插入的数据来源,这里的数据来源是从access_log表中选取,并通过连接操作筛选出特定的数据行。

二、选择插入的数据列

sql

SELECT a.id, a.ip, a.province, a.city, a.isp, a.access_time, a.access_hour,a.url, a.status, a.traffic, a.referer,a.ref_type, a.c_info, a.client_type, a.client_browser FROM access_log a

从access_log表(别名a)中选择了多个列,包括id、ip、province、city、isp等一系列与访问日志相关的字段。

三、连接子查询筛选数据

子查询部分:

sql

SELECT c.ip,MIN(c.id) AS id FROM access_log c GROUP BY c.ip,c.c_info

这个子查询从access_log表(别名c)中按照ip和c_info分组,然后为每个分组找到最小的id值。

连接条件:

sql

JOIN (... ) b ON a.ip = b.ip AND a.id = b.id

主查询中的access_log表(别名a)与子查询的结果集(别名b)进行连接,连接条件是a.ip = b.ip和a.id = b.id,即根据ip和id进行匹配,确保插入到目标表中的数据是每个ip下最小id对应的那一行数据。

综上所述,这段 SQL 语句的目的是从access_log表中筛选出每个ip下特定的数据行,并将这些数据插入到access_log_first表中,实现了对数据的筛选和整理。

相关推荐
Escalating_xu32 分钟前
【C 语言】数据在内存中的存储:补码、大小端、整型陷阱与 IEEE 754 全解析
java·c语言·网络
灯澜忆梦1 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
一个风轻云淡1 小时前
GCC 和 GDB命令简单解读
java·linux·前端
省钱兄--zs1 小时前
西安24小时自助健身房解决方案实战:系统开发与部署全流程指南
java·spring boot·系统架构·intellij-idea·需求分析
资料库011 小时前
Linux 8个常见运维故障排查
java·linux·运维
要开心吖ZSH2 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
Android系统攻城狮3 小时前
Linux Gstreamer深度解析之gst_audio_sink_get_type调用流程与实战(六十五)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
Joy T3 小时前
Spring AI 接入已有 Java 项目的三种架构设计
java·人工智能·springai·ai入门·chatclient·ai service·ai能力接入
杨运交3 小时前
[076][核心模块]构建优雅的Java异常处理框架:从错误码到全局异常处理
java·开发语言