查询满足连续任意30天的全量交易的多个商户

news2025/7/19 17:00:15

需求说明:

        先说表结构把,就是一张订单表存了商户号和其他相关信息,现在要查询这个订单表中以商户为主体的连续交易,也就是每天产生至少一笔订单的商户才算连续,不知道看到的小伙伴有没有什么想法和头绪,在一般的业务场景下可能不会有这个需求,但只有遇到了才想知道解决方案 当时这个需求背景是为应付某某检查所以才有这个需求,步入正题把 具体分析都写在sql中 不懂可以看看总结的难点,大家有场景可以试一试,一定是有多种写法的,这里我写出了两种,

最优写法:

-- with:创建临时查询命名的关键字
WITH consecutive_numbers (create_time,cust_no,group_id) AS (
  SELECT
  create_time,
  cust_no,
  -- 根据客户号分区再使用行号判断这段时间是否为连续数字,如果group_id是相同的说明就是连续的
  create_time - ROW_NUMBER() OVER (PARTITION BY cust_no ORDER BY create_time) AS group_id
  FROM (
    -- 去重意义:去重是为了保证每一天每个客户号的多笔交易的笔数只有一笔,并且使用DISTINCT去重
    -- 去重位置:只能套在子查询里去重
    -- 如果在子查询里可以使用DISTINCT to_char(t.create_time, 'yyyyMMdd')去重
    -- 也可以使用group by to_char(t.create_time, 'yyyyMMdd')去重
    
    -- 如果放在外面使用DISTINCT去重就会失效因为group_id字段是通过 ROW_NUMBER()计算出来的他在每一行有唯一的值
    -- 并且在外面使用group by去重也会报错因为group by的字段需要和查询的字段保持一致但是group by不支持ROW_NUMBER() 窗口函数
    SELECT DISTINCT
    to_char(t.create_time, 'yyyyMMdd') as create_time,
    cust_no
    FROM
    xxx.order_info t
    WHERE
    -- 这里可以指定多个商户号或是不指定查所有商户
    cust_no IN ('199900002007','199900004854')
  )
)
SELECT
    MIN(create_time) AS start_create_time,
    MAX(create_time) AS end_create_time,
		cust_no,
    COUNT(*) AS count
FROM
    consecutive_numbers
-- 对group_id,cust_no都相同的进行分组,在对分组里面的数据计算合计就能得到连续的条数count
GROUP BY
    group_id,cust_no
-- 这个判断就是判断连续的天数大于多少    
HAVING
    COUNT(*) >= 4;

 写法2

 select abc.* from (with t as
(select a.CUST_NO, a.createTime, b.createTime as snap2
from (select DISTINCT cust_no, to_char(CREATE_TIME,'yyyyMMdd') as createTime from xxx.order_info where order_status='00') a,
(select DISTINCT cust_no, to_char(CREATE_TIME,'yyyyMMdd') as createTime from xxx.order_info where order_status='00') b
where a.CUST_NO = b.CUST_NO(+)
and a.createTime - 1 = b.createTime(+)
order by CUST_NO, createTime),
t1 as
(select t.*,
case
when snap2 is null then
1
else
0
end as lxzt
from t
order by CUST_NO, createTime),
t2 as
(select t1.*, sum(lxzt) over(order by CUST_NO, createTime) as fzyj
from t1
order by CUST_NO, createTime)
select CUST_NO,
--        fzyj,
((max(createTime)-min(createTime)) + 1) as 连续天数,
min(createTime) as start_snap,
max(createTime) as end_snap
from t2
where CUST_NO = '199900002007'
group by CUST_NO, fzyj
order by start_snap desc) abc;  

总结难点:判断连续性分析

实际上这里难点是如何判断一串数据是否具有连续性,如何将判断出的连续性结果应用在业务sql当中,这里再说明下连续性判断,举个简单例子 我这里有个表 id从1到2连续 从4到6连续  

通过这段sql可以得出,从哪开始到哪结束的连续,原理是一样的 因为id是依次增长,行号也是,所以他们相减如果是一样的 哪说明一定是连续的,再通过分组函数将相同的结果进行分组就能得到连续的数据,最后判断连续数的大小就能知道连续持续了多长

如果还有疑问的兄弟可以加我技术讨论群只纯粹讨论技术

📢 加入我们的Java技术交流群!

我们创建了一个专门针对Java技术爱好者的交流平台, 目的只是为了纯粹探讨技术难题 、分享心得与资源。无论您是初学者还是资深开发者,在这里都能找到志同道合的朋友!

🌟 群内特色:

专业讨论:专注于Java及相关技术栈的深度探讨;

互助成长:遇到问题时,总有人愿意伸出援手;

无广告环境:为了保持群内的纯净氛围,我们坚决抵制任何形式的广告行为。

👉 如何加入:

扫描下方二维码直接加入;

加入时请备注:[您的主要语言]+[从业年限](例如:Java 3年);

如果二维码已过期,请私信联系我获取最新入口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++进阶】map与set的封装实践

文章目录 map和setmapmap的框架迭代器operator()operator--()operator()和operator!()operator*()operator->() insertbegin()end()operator[] ()map的所有代码: set的封装迭代器的封装总结 map和set 通过观察stl的底层我们可以看见,map和set是通过红…

ubuntu16.04安装ibus拼音 输入法

前言 开始尝试搜狗输入,发现问题很多,放弃。网上说ibus比较稳定,决定安装ibus输入法。 步骤 安装ibus,使用如下命令, 安装完重启系统,使ibus生效; sudo apt install ibus ibus-pinyin ibus-table ibus-…

maven项目删除pom文件的依赖仍存留在项目中的解决方案【已解决】

前言 使用了pagehelper和mybatisplus的分页插件,起冲突了,想着注释掉pagehelper然后刷新maven,发现一直存留 mlgbz的 试了好多方法,什么缓存乱七八糟的,我以为出bug了 解决

Fiddle抓手机app的包

前言 本次文章讲述的是,fiddle获取手机代理,从而获取手机app的http、https请求! 一.下载安装汉化Fiddle 1.点击Fiddler官网下载链接:Download Fiddler Web Debugging Tool for Free by Telerik 2.直接运行,选择自己需…

CUDA C++ 编程指南学习

CUDA C 编程指南 (nvidia.com)https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html 2. 编程模型 2.1. 内核 CUDA C 扩展了 C,允许程序员定义 C 函数,称为内核,当被调用时,N 个不同的 CUDA 线程并行执行 N 次&am…

2023卫星视频综述论文Recent Advances in Intelligent Processing of Satellite Video

2023卫星视频综述论文Recent Advances in Intelligent Processing of Satellite Video 1.摘要2.引言3. 文章的定量分析4 难点与挑战5 方法论系统A. 卫星视频观察的特点B. 卫星视频目标跟踪与运动估计C. 卫星视频目标检测D. 卫星视频超分辨率 (VSR)E. 卫星视频目标分割&#xff…

Idea新建Spring Initializr项目文件哪些可删

​ .gitignore 用git做版本控制时 用这个文件控制那些文件或文件夹 不被提交(不用git的话可删除 没影响)HELP.md md是一种文档格式 这个就是你项目的帮助文档(可删除 没影响) mvnw linux上处理mevan版本兼容问题的脚本&#xff0…

企业高性能web服务器

web服务器介绍 Apache HTTP Server:也称为Apache,是一个开源的HTTP服务器,目前是全球使用最广泛的Web服务器 Nginx:Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 Microsoft Internet Inform…

LVS原理详解及实战部署

一、LVS简介 LVS(Linux Virtual Server)是一种基于Linux的高性能虚拟服务器集群系统,主要用于实现负载均衡。LVS通过Linux内核中的IPVS模块实现了基干!P负载均衡的功能,能够将来自网络的请求分配给后端的多个服务器,从而提供高可用性和伸缩性…

Linux系统编程:线程 3:信号量

1.信号量的概念 信号量是线程间有顺序的协调工作,信号量 (个数) 反映的是资源的数量,信号量起到锁的效果; 2.信号量的机制 (1)信号量描述可使用资源的个数; (2)p操作&#xff0c…

第二证券:全球首款双人互动剧上线 暑期游戏持续升温

全球首款双人互动剧上线 全球首款双人互动剧《谍影成双》现已在全球游戏渠道Steam、微信小程序、QQ小程序同步上线。根据上海影视乐园官方大众号,该作是2023年度爆款互动剧《飞越13号房》制造团队互影科技的全新著作。 2023年被称为互动剧的元年,“互动…

python学习day15地图、柱状图

地图、柱状图 地图示例 柱状图XY轴反转小结 时间线柱状图自动播放小结 动态柱状图sort排序练习动态柱状图 地图 from pyecharts.charts import Map mapMap() data[(北京市,999),(上海市,133),(河南省,123),(西藏自治区,123),(吉林省,12), ]map.add("地图",data,"…

ElasticSearch数据建模

文章目录 如何处理关联关系避免过多字段避免正则/通配符/前缀查询避免空值引起的聚合不准为索引的Mapping加入Meta 信息 如何处理关联关系 Object: 优先考虑反范式(Denormalization) Nested: 当数据包含多数值对象,同时有查询需求 Child/Pa…

SAP BAPI for Tcode SM12

注意:ENQUE_READ 和 ENQUE_READ2 的table ENQ是两个不同的结构 想通过 ENQUE_READ2 读取结构然后去删除 ENQUE_DELETE的 要注意不能直接用 要用 ENQUE_CONVERT_SEQG7_TO_SEQG3 进行转换 FUNCTION ENQUE_CONVERT_SEQG7_TO_SEQG3. *"-----------------------…

[000-01-030].第2节 :Zookeeper本地安装

1.Zookeeper下载地址 1.Zookeeper官网地址 2.会显示Zookeeper的一些版本 2.Zookeeper本地模式安装: 2.1.Zookeeper安装前准备 1.在Centos7虚拟机中安装jdk8 2.2.Zookeeper安装过程: 1.下载zookeeper压缩版本,解压放在opt/moduel目录下…

为啥90%设计师素材整理文件夹都是无效的?

大家好,今天我想和大家分享一下我在使用千鹿设计助手软件之前的图片管理经历,以及千鹿给我带来的巨大变化。 正文: 大家好,今天我想和大家分享一下我在使用千鹿软件之前的图片管理经历,以及千鹿给我带来的巨大变化。 …

netCDF文件预览(nc格式)

1.工具下载 软件下载:https://download.csdn.net/download/qq_34321590/89645482 2.java11环境安装 需要安装java11以上版本 安装包下载: https://download.csdn.net/download/qq_34321590/89645487 安装步骤: 1.解压 2.配置环境变量 在…

针对老年人的景区订票系统

TOC springboot303针对老年人的景区订票系统 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,…

RK3588 RTL8125BG调试

RTL8125B是一款PCIE转RJ45的网卡控制器芯片,在底层调试时只需配置PCIE即可 diff --git a/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi index 798359eaf061..d8a7a43cdfa0 100755 --- a/arch/arm64/bo…

【学习笔记】Day 14

一、进度概述 1、《地震勘探原理》第七章 二、详情 地震波动力学是相对于运动学而言的。运动学主要研究波的传播规律,其主要特征是分析、研究波的传播路径。传播速度。旅行时间等。地震波动力学则主要从能量的角度研究地震波的特征,如波的振幅、波形、频…