自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 月累计车辆,月累计时间范围非0点开始

AND CAST(s.dyardintime AS timestamp) <= CAST(dim.month_end AS timestamp),每天的数据会变成一对多,一天内包含 月区间范围内的数据,进而去统计月累计。3.利用区间值关联,产生笛卡尔积,ON CAST(s.dyardintime AS timestamp) >= CAST(dim.month_start AS timestamp)2.创建日期和地区,以及每天对应统计月份的时间范围,昨日时间范围。

2025-04-03 09:49:46 120

原创 员工表:employee,字段:employee_id,employee_name,entry_time,leave_office_time,如果未离职,则离职时间为null日历表:t_calenda

如果员工的入职时间 e.entry_time 在 2020 年 1 月 1 日 之前,GREATEST 函数会返回 2020 年 1 月 1 日,确保计算从 2020 年 1 月 1 日 开始,而不会包含员工入职前的时间。计算每个月的活跃员工数量,这是通过将每个员工的工作天数除以该月的天数来实现的。请写一条SQL查询语句,统计2020年每个月实际在职员工数量,如果1个月在职天数只有1天,数量计算方式:1/当月天数。表进行关联,以获得员工的入职时间和离职时间,并计算出员工在每个月的工作天数。

2025-02-06 17:53:57 191

原创 EXISTS 和 IN 区别

EXISTS用于判断子查询是否返回至少一行数据,一旦找到符合条件的行就停止查询,适用于检查数据是否存在的场景,尤其是在子查询数据量较大时表现较好。IN用于判断某个字段值是否在一个集合或子查询的结果集中,适用于小规模数据的匹配,且需要子查询返回具体的列值。在选择使用EXISTS还是IN时,应该根据数据的大小、查询的目的和性能需求来决定。

2025-01-20 16:34:01 577

原创 登陆登出 每分钟最大在线人数

生成时间事件:从表中提取登录和登出时间,并为每个事件设置对应的在线人数变动。排序事件:按时间顺序排序这些时间事件。计算在线人数:使用窗口函数计算每个事件发生时的在线人数。分组和排序:按分钟分组,计算每分钟的最大在线人数,并按最大在线人数降序排列。最终的结果将显示每分钟的最大在线人数。

2025-01-14 16:19:44 351

原创 使用sql计算每天新增用户的ltv1、ltv2以及次留

LTV定义:sun(新增前N天的充值)/sum(账号数),比如20180623的新增用户,计算LTV1就是sum(20180623的新增用户在当日总充值)/sum(20180623新增用户数),LTV2是sum(20180623的新增用户在20180623、20180624两日总充值)/sum(20180623新增用户数)它使用了自连接查询,将用户在前一天登录的记录和后一天登录的记录进行比较,统计了每天的次留用户数。表中筛选出当天和次日的付费记录,并计算了每天的首日和次日付费总额。以下使用mysql实现。

2024-10-31 10:15:00 1099

原创 mysql 计算不同胜率的活跃玩家的次日,3日,7日留存率

它根据每天的日期(logymd)和最高段位(max_rank)、胜率段落(win_rate_segment)进行分组,并计算总玩家人数(total_players)、第二天的留存人数(next_day_players)、第三天的留存人数(day3_players)和第七天的留存人数(day7_players)。注意:不是新手留存,是段位活跃玩家留存;最终的结果则是将留存数据进行展示,按照日期(date)、最高段位(rank_level)、胜率段落(win_rate_segment)进行排序。

2024-10-31 10:00:00 1560

原创 使用python提取日志里面的role_id、vip字段的值,(vip字段可能为空或者缺失,此时需要给默认值0):

日志样例:1068 1529597015396 g60-database-380.i.nease.net /home/g60/gamedata/log/g60_GameStatistic_20180622.log 380_game02 G60_GameStatistic 1529596878_35 [2018-06-22 00:01:18][MercLevelUp],{"merc_capacity":2739,"cur_level":70,"accountid":"aebfr2ualeolqplc@ad.

2024-10-31 09:19:11 366

原创 (MySQL 递归)推荐表结构如下,请写⼀段sql,根据1层推荐的数据,查找所有⼈之间的推荐层级(如果A推荐B,B推荐C,则A到C就是⼆级推荐;C推荐H,则A到H就是三级推荐),并更新到表中

推荐表结构如下,请写⼀段sql,根据1层推荐的数据,查找所有⼈之间的推荐层级(如果A推荐B, B推荐C,则A到C就是⼆级推荐;C推荐H,则A到H就是三级推荐),并更新到表中,创建临时表存储计算出的新层级关系。使用递归查询计算新层级关系。创建表语句及查询语句。

2024-10-29 16:52:18 170

原创 某游戏的某促销活动,会向玩家推荐一个道具

某游戏的某促销活动

2024-10-24 15:42:48 656

原创 sql server 之动态sql

需求:写动态SQL 实现 最后的and 限制 查找所有字段含01HX970,实现效果如下。来调试长 SQL 语句,它可能被截断。你可以尝试将结果输出到临时表或文件,而不是直接。命令只会输出部分内容。它最多可以打印 4000 个字符(如果是。来输出 SQL 语句。:有时,SSMS 的。

2024-10-22 11:45:58 468

原创 sql server 行转列及列转行

图1图2。

2024-10-18 18:14:36 1706 1

原创 MYSQL求月份同比数据和环比数据

环比百分比使用了一个CASE语句进行计算,如果前一个月的总金额存在,则将当前月的总金额减去前一个月的总金额,除以前一个月的总金额,并乘以100。使用LaggedMonthlyTotals子查询将每个月的总交易金额与相邻月和相同月的总交易金额进行连接。连接条件使用了日期函数和字符串处理函数将当前月份前一个月和前一年的同一月计算出来,并与对应的账户进行匹配。这里使用了substr函数将transaction_date字段的前7个字符提取为年份和月份,并使用SUM函数计算每个账户每个月的总金额。

2024-09-29 11:23:02 815

原创 窗口函数用法

窗口函数是SQL中非常强大的工具,允许你在保持数据行独立性的同时,对数据集中的行进行复杂的计算。通过合理使用分区、排序和窗口框架,你可以解决许多复杂的数据分析问题。

2024-09-29 11:10:52 519

原创 窗口函数分组求累加值的差值

在这段代码中,COALESCE函数用于将下一行的值与当前行的值进行比较,如果下一行的值为空,则返回当前行的值。1.源数据如下,需求:求每天每小时,yield、energy 的差值,speed,dspeed,kw的均值,当insertType=1时,下一行的yield、energy值会重新变化。整体来说,这段代码的作用是计算一个重启组标识,即对于相同日期和小时的数据,如果前一行的[insertType]等于1,则当前行的重启组标识为1,否则为0。③ 在②的基础上,对差值进行求和,即可求出结果。

2024-09-27 10:57:44 435

原创 求每个客户订单之前的累计订单金额

1.订单表数据如下:在此基础上增加一列,求每个客户订单之前的累计订单金额,实现效果如下:其中子查询部分详解窗口函数: 这个窗口函数用于计算的总和。 :指定了窗口的分区条件,即按照来分组。这意味着窗口函数将分别为每个客户的订单进行求和。 :指定了窗口内行的排序方式,即按照进行排序。这对于窗口帧(ROWS BETWEEN ...)的定义是必要的。 :定义了窗口帧的范围。这里表示从分区(即客户)的第一个订单开始,到当前订单之前的所有订单(包括当前订单的前一个订单,但不包括当前订单本身)

2024-09-24 11:26:15 611

原创 如果不用dense_rank() over() 如何实现分组排序

①使用自连接,只保留a 表的income小于等于b 表的income ,使得在后面按employeeid,a.income分组去重b.income,是累减的,即最小的a.income会对应所有的b.income,最大的a.income 只有一个b.income。1.在不用dense_rank() over() 的情况下实现,按EmployeeID分组,Income降序排序。3.最后以原表为主表,左连接t 表实现效果。2. 去重统计b.income 的数量。2. 不使用dense_rank()

2024-09-13 09:24:01 257

原创 查询出每个部门中,工资从高到低进行排名,工资部门排名在前 50%的员工

1.查询出每个部门中,工资从高到低进行排名,工资部门排名在前 50%的员工(比如部门有6个人,则前50%,则是前3名,如果部门人数为奇数,向下取整确定前 50%的人数),如果其入职天数早于部门平均入职天数,还要列出其入职天数。如果其入职时间晚于部门平均入职天数,则入职天数显示为空 要求查询的结果格式:部门名称,员工,工资,部门排名,入职天数。2. 筛选前50%的员工,且对入职天数做进一步处理。1.先利用窗口函数,求出基础数据列。

2024-09-09 20:58:10 431

原创 上级ID显示的是上级部门的ID , 该公司总共有三个层级,请用SQL查询出公司的组织架构情况

1.上级ID显示的是上级部门的ID , 该公司总共有三个层级,请用SQL查询出公司的组织架构情况,结果输出三个字段:一级部门名称、二级部门名称、三级部门名称。采用自连接,取出各层部门。

2024-09-09 20:45:20 327

原创 MySQL电影院连续座位需求

2.通过 `(rn - grp)` 来分组,从而识别连续的未预订座位。HAVING: 根据条件筛选出连续的未预订座位,`COUNT(*) >= 4` 确保找到至少4个连续的未预订座位。1.通过下移函数lag 和窗口函数 将未预订的位置,按seat排序分别下移 1 2 3格,还有rowid。1. 第一个 `ROW_NUMBER()` 计算每个座位在其 `ROWID` 下的序号。第二个 `ROW_NUMBER()` 按照状态分组,计算相同状态内座位的序号。2.判断两两之间是否连续,作为字段is_type。

2024-08-28 17:30:29 336

原创 需要视频号搞笑类型视频的曝光点赞时长等数据

用户行为表:t_user_video_action_d。视频表:t_video_d。

2024-08-09 14:26:28 401

原创 如下为平台商品促销数据:字段为品牌,打折开始日期,打折结束日期

第二次活动时间为 2021-06-09 到 2021-06-21 其中 9 号到 15 号为重复天数,只统计一次,即 vivo 总打折天数为 2021-06-05 到 2021-06-21 共计 17 天。计算每个品牌总的打折销售天数,注意其中的交叉日期,比如 vivo 品牌,第一次活动时间为 2021-06-05 到 2021-06-15,2.若max_end_date>start_date,则说明存在区间交叉,应将start_date改为max_end_date+1。4.计算最终结果,求和day_c。

2024-07-16 17:24:46 620 1

原创 12.20~12.21两日应用商店未更新下载量数据

4.将开始时间和结束时间用rk 进行关联,一个start 对应一个end ,并且取出end 日期对应的new_installs,用datediff 函数计算开始日期和结束日期之间相差的天数+1,再用new_installs/天数,求出平均值。2. 对new_installs和prev_new_installs 关系进行判断 ,取出未更新下载量的开始日期和结束日期,做为字段gap_type。5.最后关联回源表,对new_installs 做判断 生成调整后的new_installs_adj。

2024-07-16 09:59:25 847

原创 用户当天互相认识且互发消息后、且接下来每天都聊天活跃(聊天两次以上)的用户数量多少?(sql server)

②:在①的基础上增加两个字段,rk字段以user1 user2 为分组 login_data 降序排序,为了求每两个互用第一天发消息时的排序,is_hf字段以user1 user2 login_data 三个字段分组 统计userid 的数量 用来判断每两个用户每天是否有互发,此字段需要大于2才是符合要求的。⑥:在⑤的基础上,限制is_max_rk=is_date_rk+1 即1一月中符合聊天的天数要等于 月底距离第一天聊天的天数+1 ,且统计出最后符合的用户数。

2024-06-18 17:39:12 315

原创 MySQL 统计上周上上周金额

返回值: 返回一个整数,表示指定日期的年份和周数的组合。返回的格式为YYYYWW,其中YYYY是四位数的年份,WW是两位数的周数。语法: DATE_SUB(date, INTERVAL expression unit)返回值: 返回一个新的日期或日期时间值,该值是在指定的日期上减去指定的时间间隔后得到的。以上示例中,DATE_SUB函数分别将指定的日期减去了1年、1个月,1周和7天。语法: YEARWEEK(date, [mode])

2024-05-21 14:47:39 552

原创 SQL统计次月留存率

解读以上结果:2020年1月入职,2020年1月离职的 人数是4个,2020年1月入职,2020年2月离职的人数(cnt),2020年1月入职到2020年2月离职的人数是3+4=7(ljzrs),,并把一列作为入职月份,另外一列作为离职月份,离职月份必须大于等于入职月份,并且剃掉入职月份为'9999-01' 的数据。,rzmonth(入职月份),lzmonth(离职月份),cnt(人数),且将离职月份为空的数据转换为‘9999-01’,确保每一个离职月份都有数据,且将没有离职月份数据的人数由空值转为0。

2024-05-16 12:21:55 1149

原创 MySQL中的计算列(Generated Column列)-如何让数据库中某个字段随时间自动更新

一、计算列MySQL 的 Generated Column 又称为虚拟列或计算列。Generated Column列的值是在列定义时包含了一个计算表达式计算得到的。1、定义Generated column列的语法如下:列名 类型(1)AS(expr)用于生成计算列值的表达式;(2)VIRTUAL或STORED关键字表示是否存储计算列的值:(3)VIRTUAL:列值不存储,虚拟列不占用存储空间,默认设置为VIRTUAL;(4)STORED:在添加或更新行时计算并存储列值。

2024-04-23 16:04:28 2223

原创 每天的近一周总点赞量和一周内最大单天转发量(SQL开窗 rows n preceding 最近n行的数据)

短视频信息表tb_video_info。

2024-04-23 12:05:13 218

原创 MYSQL查询某个用户所在部门的所有上级部门

结果解释:员工ID为‘02e60b94-618f-49a1-8341-e80ab3a2b908’ 部门编码为 ‘a8fc6b71-ff7d-43e1-bb1b-a570d25ed15d‘ 名称为测试1 部门,测试1部门的上级部门为测试部门,测试部门的上级部门为 军人心理健康管理系统。1.sys_dept(部门表),主要用到字段为id(部门编码),name(部门名称),parent_id(上级部门)2.sys_user(用户表),主要用到字段为id(员工ID),dept_id(部门编码)

2024-04-22 17:11:06 2729 1

原创 SQL 相对位置的开窗函数PERCENT_RANK()和CUME_DIST()

1.PERCENT_RANK()函数计算一组行中行的相对排名。从0开始,以tag 分组,时间升序,计算时间的相对排名2.CUME_DIST() 函数计算结果集的分区中值的相对位置 (非0开始,而是看当前行数占所有行数的百分比)

2023-08-28 11:39:32 548 1

原创 oracle存储过程笔试题

oracle存储过程计算预估值

2023-07-07 18:27:44 747 1

原创 SQL统计次月复购率

【代码】SQL统计次月复购率。

2023-07-06 17:28:47 879 1

原创 oracle创建用户并赋予权限

【代码】oracle创建用户并赋予权限。

2023-07-06 17:14:36 737 1

原创 mysql中left join条件在on与where时的区别

与②对比,把where改为and,明明a.id>1,但仍有a.id=1的记录,且a.id=1的关联数据对不上。由于这里添加a表的过滤条件,但主表仍然是a表,所以a表的记录必定要出现在结果集中,只是不会再去b表寻找匹配的结果,而直接用null填充。查询过程与④一样,先在a中拿到一条记录,然后去b中从头到尾寻找符合a.id=a_id and a_id>2的记录,只要找到则拿出来并继续往下寻找,如果找完b表都没数据,那么右侧填充null,a表第一条记录寻找结束。根据⑤的分析,处理过程一样,只是多了一个or。

2023-07-06 17:07:14 2100 1

原创 日期与字符串之间的转换

日期与字符串之间的转换

2022-09-07 18:06:44 9720

原创 利用逗号拆分行,逗号拼接行

mysql 利用逗号拆分行,逗号拼接行

2022-09-05 17:58:26 4635

原创 关于邮箱的正则表达式

关于邮箱规范的正则表达式

2022-09-01 08:29:07 47934 2

原创 SQL求出最大连续登陆天数

SQL 连续登陆问题

2022-08-31 17:58:07 3466 1

原创 oracle之sys_connect_by_path函数

1. sys_connect_by_path 详解 ------------oracle9i 开始有的自带函数(用于解决团队关系等)语法:Oracle函数:sys_connect_by_path 主要用于树查询(层次查询) 以及 多列转行。其语法一般为: select ... sys_connect_by_path(column_name,'connect_symbol') from table start with ... connect by ... prior理...

2022-02-14 11:04:04 7719

原创 MYSQL 取某特定行数据及求中位数位置及数值

取某特定行数据以下的两种方式均表示取2,3,4三条数据。1.select* from test LIMIT 1,3;当limit后面跟两个参数的时候,第一个数表示要跳过的数量,后一位表示要取的数量。2.select * from test LIMIT 3 OFFSET 1;(在mysql 5以后支持这种写法)当 limit和offset组合使用的时候,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量 。...

2022-02-11 14:42:55 1558

原创 Kettle 连接Oracle、mysql数据库报错

连接Oracle报错 如果本地已经安装Oracle客户端,则需要在oracle客户端目录下复制对应的jar包。例如:D:\app\root\product\11.1.0\db_3\jdbc\lib 需要复制路径内所有ojdbc开头的文件,例如ojdbc5、ojdbc6.jar等 将复制好的ojdbc文件粘贴到Spoon目录下,例如:D:\Program Files (x86)\data-integration\lib路径下即可。 重新启动Spoon(kettle)后..

2021-11-17 14:38:06 1183 1

某游戏的某促销活动,会向玩家推荐一个道具

某游戏的某促销活动,会向玩家推荐一个道具

2024-10-24

某游戏的某促销活动,会向玩家推荐一个道具

某游戏的某促销活动,会向玩家推荐一个道具

2024-10-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除