选读SQL经典实例笔记08_区间查询

news2024/11/26 4:44:45

 

1. 计算同一组或分区的行之间的差

1.1. 最终结果集

1.1.1. sql

DEPTNO ENAME             SAL HIREDATE    DIFF
------ ---------- ---------- ----------- ----------
    10 CLARK            2450 09-JUN-1981      -2550
    10 KING             5000 17-NOV-1981       3700
    10 MILLER           1300 23-JAN-1982        N/A
    20 SMITH             800 17-DEC-1980      -2175
    20 JONES            2975 02-APR-1981        -25
    20 FORD             3000 03-DEC-1981          0
    20 SCOTT            3000 09-DEC-1982       1900
    20 ADAMS            1100 12-JAN-1983        N/A
    30 ALLEN            1600 20-FEB-1981        350
    30 WARD             1250 22-FEB-1981      -1600
    30 BLAKE            2850 01-MAY-1981       1350
    30 TURNER           1500 08-SEP-1981        250
    30 MARTIN           1250 28-SEP-1981        300
    30 JAMES             950 03-DEC-1981        N/A

1.1.2. 每个员工的DEPTNO、ENAME和SAL,以及同一个部门(即DEPTNO相同)里不同员工之间的工资差距

1.1.3. 一个部门里入职日期最晚的那个员工,将其工资差距设置为N/A

1.2. DB2

1.3. PostgreSQL

1.4. MySQL

1.5. SQL Server

1.6. sql

select deptno,ename,hiredate,sal,
         coalesce(cast(sal-next_sal as char(10)),'N/A') as diff
    from (
  select e.deptno,
         e.ename,
         e.hiredate,
         e.sal,
         (select min(sal) from emp d
           where d.deptno=e.deptno
             and d.hiredate =
                  (select min(hiredate) from emp d
                    where e.deptno=d.deptno
                    and d.hiredate > e.hiredate)) as next_sal
    from emp e
         ) x

1.6.2. 使用标量子查询找出同一个部门里紧随当前员工之后入职的员工的HIREDATE

1.6.3. 使用了MIN(HIREDATE)来确保仅返回一个值

1.6.3.1. 即使同一天入职的员工不止一个人,也只会返回一个值

1.6.4. 另一个标量子查询来找出入职日期等于NEXT_HIRE的员工的工资

1.6.4.1. 使用MIN函数来确保只返回一个值

1.7. Oracle

1.7.1.  sql

select deptno,ename,sal,hiredate,
        lpad(nvl(to_char(sal-next_sal),'N/A'),10) diff
   from (
 select deptno,ename,sal,hiredate,
        lead(sal)over(partition by deptno
                          order by hiredate) next_sal
   from emp
        )

2. 定位连续值区间的开始值和结束值

2.1. 示例

2.1.1. sql

select *
  from V
PROJ_ID PROJ_START  PROJ_END
------- ----------- -----------
      1 01-JAN-2005 02-JAN-2005
      2 02-JAN-2005 03-JAN-2005
      3 03-JAN-2005 04-JAN-2005
      4 04-JAN-2005 05-JAN-2005
      5 06-JAN-2005 07-JAN-2005
      6 16-JAN-2005 17-JAN-2005
      7 17-JAN-2005 18-JAN-2005
      8 18-JAN-2005 19-JAN-2005
      9 19-JAN-2005 20-JAN-2005
     10 21-JAN-2005 22-JAN-2005
     11 26-JAN-2005 27-JAN-2005
     12 27-JAN-2005 28-JAN-2005
     13 28-JAN-2005 29-JAN-2005
     14 29-JAN-2005 30-JAN-2005

2.2. 最终结果集

2.2.1.  sql

PROJ_GRP PROJ_START  PROJ_END
-------- ----------- -----------
       1 01-JAN-2005 05-JAN-2005
       2 06-JAN-2005 07-JAN-2005
       3 16-JAN-2005 20-JAN-2005
       4 21-JAN-2005 22-JAN-2005
       5 26-JAN-2005 30-JAN-2005

2.2.2. 必须明确什么是区间

2.2.2.1. PROJ_START和PROJ_END的值决定哪些行属于同一个区间

2.2.2.2. 如果某一行的PROJ_START值等于上一行的PROJ_END值,那么该行就是“连续”的,或者说它属于某个组

2.3. DB2

2.4. PostgreSQL

2.5. MySQL

2.6. SQL Server

2.7. sql

create view v2
as
select a.*,
       case
         when (
            select b.proj_id
              from V b
             where a.proj_start = b.proj_end
              )
              is not null then 0 else 1
       end as flag
  from V a

2.7.2.

select proj_grp,
         min(proj_start) as proj_start,
         max(proj_end) as proj_end
    from (
  select a.proj_id,a.proj_start,a.proj_end,
         (select sum(b.flag)
            from V2 b
           where b.proj_id <= a.proj_id) as proj_grp
    from V2 a
         ) x
   group by proj_grp

2.8. Oracle

2.8.1.   sql

select proj_grp, min(proj_start), max(proj_end)
    from (
  select proj_id,proj_start,proj_end,
         sum(flag)over(order by proj_id) proj_grp
    from (
  select proj_id,proj_start,proj_end,
         case when
              lag(proj_end)over(order by proj_id) = proj_start
              then 0 else 1
         end flag
    from V
         )
         )
   group by proj_grp

3. 生成连续的数值

3.1. DB2

3.2. SQL Server

3.3. sql

with x (id)
  as (
  select 1
    from t1
   union all
  select id+1
    from x
   where id+1 <= 10
  )
  select * from x

3.4. Oracle

3.4.1.  sql

with x
 as (
 select level id
   from dual
   connect by level <= 10
 )
 select * from x

3.4.1.1. oracle9i

3.4.1.2. 在WHERE子句中断之前,行数据会被连续生成出来。Oracle会自动递增伪列LEVEL的值

3.4.2.  sql

select array id
   from dual
  model
    dimension by (0 idx)
    measures(1 array)
    rules iterate (10) (
      array[iteration_number] = iteration_number+1
    )

3.4.2.1. oracle10g

3.4.2.2. 在MODEL子句解决方案里,有一个显式的ITERATE命令,该命令帮助生成多行数据

3.5. PostgreSQL

3.5.1.  sql

select id
   from generate_series (1,10) x(id)

3.5.1.1. GENERATE_SERIES函数有3个参数,它们都是数值类型

3.5.1.2. 第一个参数是初始值,第二个参数是结束值,第三个参数是可选项,代表“步长”(每次增加的值)

3.5.1.3. 如果没有指定第3个参数,则默认每次增加1

3.5.1.4. 传递给它的参数甚至可以不是常量

3.5.1.5. sql

select id
  from generate_series(
         (select min(deptno) from emp),
         (select max(deptno) from emp),
         5
       ) x(id)

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

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

相关文章

20 - 队列 - 链队列——队列的链式表示和实现

前面我们学习了 先进先出、后进后出 的线性表- 队列,并且我们是使用数组进行了实现,那么这节课我们来使用链表来实现队列,即链队列! 队列的定义 队列(Queue)也是一种线性表, 但是它仅能在一端进行插入,而另一端进行删除的操作 ,插入的一端称为 队尾rear,删除的一端…

针对Weblogic上的shiro漏洞利用工具

工具介绍 日常项目中,可能会碰见部署在weblogic上的shiro,所以先写了这个生成攻击payload的小Demo,方便后面使用。但目前只支持无回显命令执行,后续回显、内存马功能后面出差后再写。 关注【Hack分享吧】公众号,回复关…

【HCIA】12.网络服务与应用

文件传输协议FTP FTP基于TCP,传输较慢,但是比较可靠。典型的C/S架构。双通道协议。TFTP基于UDP,传输较快,但是不可靠。FTP有两种不同的传输模式 ASCII模式 传输文本文件时会对文本内容进行编码方式转换,提高传输效率&…

音视频技术开发周刊 | 302

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程 Code Interpreter 已经正式开放。 上海世界AI大会:MidJourney…

Fedproto:原型聚合的联邦学习框架

题目:FedProto: Federated Prototype Learning across Heterogeneous Clients 网址:http://arxiv.org/abs/2105.00243 目录 前言 什么是原型? Fedproto框架 fedproto settings Fedproto算法 优化目标 全局聚合 局部更新 伪代码 前言…

抖音seo源码搭建,抖音矩阵系统源码分发,抖音矩阵账号管理

前言: 抖音seo源码,抖音矩阵系统源码搭建,抖音矩阵同步分发。抖音seo源码部署是需要对接到这些正规接口再来做开发的,目前账号矩阵程序开发的功能,围绕一键管理多个账号,做到定时投放,关键词自动…

[Linux笔记]vim基础

vim本身不是像vs那样什么都能做的ide,只是单纯的编辑器。 命令行输入vim 文件名,会以vim打开文件。 若当前路径下尚无该名称的文件,则会在保存退出时创建该文件。 在vim中操作,尽量不要用鼠标及其滚轮操作,而只用键盘…

tql!AD域渗透信息收集可视化工具

工具介绍 adalanche是一款ad域中的ACL可视化及利用工具,和BloodHound功能类似,能方便域渗透人员快速发现域中的弱点;有开源版和商业两个版本。 关注【Hack分享吧】公众号,回复关键字【230709】获取下载链接 相比于BloodHound工具…

nest.js 添加 swagger 响应数据文档

基本使用 通常情况下,在 nest.js 的 swagger 页面文档中的响应数据文档默认如下 此时要为这个控制器添加响应数据文档的话,只需要先声明 数据的类型,然后通过ApiResponse 装饰器添加到该控制器上即可,举例说明 todo.entity.ts …

DP1044 CAN FD 待机模式总线收发器替代TJA1044

5V 供电,IO 口兼容 3.3V,5Mbps,CAN FD 待机模式总线收发器DP1044是一款应用于 CAN 协议控制器和物理总线之间的接口芯片,可应用于卡车、公交、小汽车、工业控制等领域,支持 5Mbps 灵活数据速率(Flexible Da…

新零售商城系统开发流程,新零售商城系统的前景如何?

近10年来,新零售商城系统火爆的原因在于移动互联网普及、个性化需求的增加、优化用户体验、数据驱动的营销和线上线下融合。新零售商城系统是基于互联网技术的商城平台,通过线上线下融合、数据分析和个性化推荐等功能,为零售商提供全方位的销…

N!Weblogic CVE-2023-21839 RCE

项目简介 Weblogic CVE-2023-21839/CVE-2023-21931/CVE-2023-21979 一键检测工具,这是来自长亭xray的代码,该漏洞扫描已集成到新版本xray中。 关注【Hack分享吧】公众号,回复关键字【230708】获取下载链接 无需任何Java依赖,构造…

【C语言】unsigned 与 signed 详解

1. 基本概念 整数在存储单元中都是以补码形式存储的,存储单元中的第 1 个二进制位代表符号。整型变量的值的范围包括负数到正数。 但是在实际应用中,有的数据的范围常常只有正值(如学号、年龄等),为了充分利用变量的值…

网盘工具alist在Windows中使用教程

alist 软件同时支持 http 协议和 WebDAV 协议,并且支持很多网盘种类,这样就给我们留下了很多可玩的空间,比如: 实现网盘本地化访问关联本地的播放器,以实现很好的播放效果多端文件互传,比如将阿里云盘的文…

GO语言slice

slice: data lencap 以及存取的元素是可以安全读写的 Slice 扩容。 1,预估: 2,预估容量后*字节数 所需的内存 3,各种语言从OS上提前申请内存,匹配GO规则的内存

nosql——Redis,Mongodb

目录 一、redis 1、 string类型数据的命令操作 2、 list类型数据的命令操作 3、 hash类型数据的命令操作 4、Keys相关的命令操作 二、mongodb 1. 创建一个数据库 名字grade 2. 数据库中创建一个集合名字 class 3. 集合中插入若干数据 文档格式如下 4. 查找 5. 增加、…

配置jenkins 服务器与目标服务器自动化部署

在配置完远程构建后可以通过添加post-build step 执行shell脚本的方式将包传到远程服务器等一系列操作。 通过scp传输打包好的项目到目标服务器 按照链接 方式配置免密操作,需要注意的是要在jenkins 用户目录下配置生成私钥密钥,配置jenkins 的免密&…

SQL数据库(设置模式、数据库操作、表操作、列操作、SQL索引/约束、SQL数据类型、SQL函数、常见问题)

目录 SQL数据库 设置模式 SET NAMES utf-8 set sql_safe_updates1 数据库操作 CREATE DATABASE databaseName(创建数据库) USE databaseName(选择数据库) DROP DATABASE databaseName(删除数据库) …

一种集成低损耗二极管的SiC沟槽MOSFET,用于提高开关性能

标题:A Low-Loss Diode Integrated SiC Trench MOSFET for Improving Switching Performance 阅读日期:2023.7.17 研究了什么 该研究提出并通过数值模拟对一种集成低损耗二极管(LLD-ATMOS)的硅碳化物(SiC&#xff09…

【SSCMS 内容管理系统】环境配置篇

SSCMS 内容管理系统基于微软 .NET Core 平台开发,用于创建在 Windows、Linux、Mac 以及 Docker 上运行的 Web 应用程序和服务。 具有”跨平台、分布式部署“、”网站群与多服务器发布“、”良好的扩展性与二次开发“ 等特点。 MySqlSSCMS系统(V6版本&am…