如何用sql查询出连续三个月金额大于50的记录

with tmp as
(
select ‘A‘ AS USERNAME,to_date(‘2017.10‘,‘yyyy.mm‘) month,45 num from dual union all
select ‘A‘ AS USERNAME,to_date(‘2017.11‘,‘yyyy.mm‘) month,53 from dual union all
select ‘A‘ AS USERNAME,to_date(‘2017.12‘,‘yyyy.mm‘) month,59 from dual union all
select ‘B‘ AS USERNAME,to_date(‘2018.1‘,‘yyyy.mm‘) month,78 from dual union all
select ‘B‘ AS USERNAME,to_date(‘2018.2‘,‘yyyy.mm‘) month,69 from dual union all
select ‘B‘ AS USERNAME,to_date(‘2018.3‘,‘yyyy.mm‘) month,51 from dual union ALL
select ‘B‘ AS USERNAME,to_date(‘2018.5‘,‘yyyy.mm‘) month,49 from dual union ALL
select ‘B‘ AS USERNAME,to_date(‘2018.4‘,‘yyyy.mm‘) month,51 from dual union ALL
select ‘B‘ AS USERNAME,to_date(‘2018.6‘,‘yyyy.mm‘) month,49 from dual union ALL
select ‘A‘ AS USERNAME,to_date(‘2017.9‘,‘yyyy.mm‘) month,52 from dual union ALL
select ‘A‘ AS USERNAME,to_date(‘2017.7‘,‘yyyy.mm‘) month,49 from dual union ALL
select ‘A‘ AS USERNAME,to_date(‘2017.8‘,‘yyyy.mm‘) month,55 from dual
)
select USERNAME,month start_month,num,num2,num3 from
( select USERNAME,
month,
num,
lead(num, 1, null) over(PARTITION BY username order by month) num2,
lead(num, 2, null) over(PARTITION BY username order by month) num3
from tmp order by username,month)
--where num >=50 and num2 >=50 and num3 >=50

原文地址:https://www.cnblogs.com/HondaHsu/p/12197970.html

时间: 2024-11-06 07:25:12

如何用sql查询出连续三个月金额大于50的记录的相关文章

如何将sql查询出的列名用注释代替?

如何将sql查询出的列名用注释代替? 大家正常的工作的时候,会有这样的要求,客户想要看下原始数据,但是呢.前台导出又麻烦,这时候只能从数据库拷贝出来一份.但是呢,数据库里面的字段客户又看不明白,只能用数据库里面的注释.但是这时候,如果要求很多张表,难道我们要一个个复制吗?这也太tm蠢了. 1 查看我们表 select * from user_col_comments where table_name='TNAME'; 2 写上函数 create or replace function f_col

SQL查询出当前服务器时间是否在表T1时间段内,如果有则选择出

表T1 开始 时间         结束时间          09:00:00          12:00:00      14:00:00          17:00:00 查询出当前服务器时间是否在表T1时间段内,如果有则选择出 选出的sql结果集如下,求SQL,  注:SQL2000环境 开始 时间         结束时间           14:00:00          17:00:00 方法一: DECLARE @t TABLE (     beginTime CHAR(

SQL查询出每门课都大于80 分的学生姓名

Course表如下: 查询出每门课都大于80 分的学生姓名有两种方法. 1.select  distinct name from Course where name not in (select distinct name from Course where score<=80) 2.select  name    from Course group by name having min(score)>80

T-SQL 查询出某个列总值大于X的数据

原文: https://www.lesg.cn/netdaima/sqlservert-sql/2016-459.html 今天操作查询的时候遇见一个这样的要求: 有一张表 用户ID 购买日期 购买金额 购买状态   1 2016-10-12 100 1   2 2016-11-12 10 1   2 2016-11-15 100 1   需要查询出11-12 到 11-15期间,购买总金额大于105的: 查询Sql 如下(需要使用到having 函数) select 用户ID,Sum(购买金额

【转】一个SQL查询出每门课程的成绩都大于80的学生姓名

name   kecheng    fenshu 张三     语文     81张三     数学     75李四     语文     76李四     数学     90王五     语文     81王五     数学     100王五     英语     90 方法一: 思路:如果能获得一张表,由学生姓名,语文成绩,数学成绩,英语成绩的表,剩下的就是在WHERE条件中筛选及可以获得想要的结果. 具体办法:通过自连接的办法,以“姓名”为连接条件,自连接三次,便可以获得包含又姓名和三

【DB2】国标行业分类存储,通过SQL查询出层级关系

新建表 DROP TABLE Industry; CREATE TABLE Industry( IndustryCode VARCHAR(40),IndustryName VARCHAR(100),ParentID VARCHAR(40) ) 点击下载插入语句 数据截图: 现在数据是这个样子的,我们需要找出对应的层级关系,例如: 实现SQL如下: SELECT A.IndustryCode AS CLASS01,A.INDUSTRYNAME CLASS_01NM, B.IndustryCode

如何将sql查询出的结果,用符号隔开

晚饭过后,打开QQ圈子,发现QQ群里有人提问了一个问题↓ 数据表中有这样的数据 1 100 1 101 1 106 2 100 2 109 3 112 如何转换为 1 100,101,106 2 100,109 3 112 知道写存储过程或者函数可以解决,但是想想能不能用一条sql语句解决...未果... 还是去搜索了下怎么搞,→转载链接← create table tb(id int, value varchar(10)) insert into tb values(1, 'aa') inse

sql语句查询出表里符合条件的第二条记录的方法

创建用到的表的SQL CREATE TABLE [dbo].[emp_pay]( [employeeID] [int] NOT NULL, [base_pay] [money] NOT NULL, [commission] [decimal](2, 2) NOT NULL ) ON [PRIMARY] 生成的表,及表中的数据: --方法一 select top 1 * from ( SELECT TOP 2 * FROM [dbo].[emp_pay] WHERE base_pay = 500

权限管理(RBAC模型) 一条SQL查询出菜单

//用户表 SELECT m.* FROM sys_user su //用户角色表,以用户id为条件 JOIN sys_user_role ur on su.id=ur.user_id //角色表,以角色id为条件 JOIN sys_role r on ur.role_id=r.id //角色菜单表,以角色id为条件 JOIN sys_role_menu rm on rm.role_id=r.id //菜单表,以菜单id为条件 再通过用户名进行查询 JOIN sys_menu m on m.id