数据库环境:Oracle11g

现有某监测站的监测数据如下表。要求:查询出每个测站的水位最大最小值及最大最小值对应的时间,

如果最大、最小值存在重复,则只显示重复数据中最新时间的那条数据。

实现思路:

  1. 根据测站和水位分组,按最新时间排序,有重复的只取最新时间的数据
  2. 分别求得最大、最小值的所在数据行,然后union

准备建表,导入数据的脚本

create table dse_river_r(stcd varchar2(8),tm date,z number(6,2))insert into dse_river_r values('80520508',to_date('2013-07-01 09:00:00','yyyy-mm-dd hh24:mi:ss'),10.02);
insert into dse_river_r values('80520508',to_date('2013-07-01 08:00:00','yyyy-mm-dd hh24:mi:ss'),9.98);
insert into dse_river_r values('80520508',to_date('2013-07-01 07:00:00','yyyy-mm-dd hh24:mi:ss'),10.02);
insert into dse_river_r values('60407758',to_date('2013-07-01 09:00:00','yyyy-mm-dd hh24:mi:ss'),9.00);
insert into dse_river_r values('60407758',to_date('2013-07-01 08:00:00','yyyy-mm-dd hh24:mi:ss'),10.00);
insert into dse_river_r values('60407758',to_date('2013-07-01 07:00:00','yyyy-mm-dd hh24:mi:ss'),12.00);
insert into dse_river_r values('60407725',to_date('2013-07-01 09:00:00','yyyy-mm-dd hh24:mi:ss'),9.42);
insert into dse_river_r values('60407725',to_date('2013-07-01 08:00:00','yyyy-mm-dd hh24:mi:ss'),9.42);
insert into dse_river_r values('60407725',to_date('2013-07-01 07:00:00','yyyy-mm-dd hh24:mi:ss'),9.42);
insert into dse_river_r values('60507426',to_date('2013-07-01 10:00:00','yyyy-mm-dd hh24:mi:ss'),12.00);
insert into dse_river_r values('60507426',to_date('2013-07-01 09:00:00','yyyy-mm-dd hh24:mi:ss'),8.32);
insert into dse_river_r values('60507426',to_date('2013-07-01 08:00:00','yyyy-mm-dd hh24:mi:ss'),12.00);
insert into dse_river_r values('60507426',to_date('2013-07-01 07:00:00','yyyy-mm-dd hh24:mi:ss'),9.10);

View Code

数据有了,现在我们来实现这个查询

1.过滤重复数据

WITH x0AS (SELECT STCD,TM,Z,ROW_NUMBER () OVER (PARTITION BY stcd, z ORDER BY tm DESC)AS rnFROM dse_river_r),x1AS (SELECT STCD, TM, ZFROM x0WHERE rn = 1)

View Code

2.union最大、最小值所在行的数据集

SELECT STCD, tm, zFROM (SELECT STCD,tm,z,MAX (z) OVER (PARTITION BY stcd) AS z_maxFROM x1)WHERE z = z_max
UNION
SELECT STCD, tm, zFROM (SELECT STCD,tm,z,MIN (z) OVER (PARTITION BY stcd) AS z_minFROM x1)WHERE z = z_min

View Code

当然,我们也可以对union操作近一步简化,直接去掉union操作

WITH x0AS (SELECT STCD,TM,Z,ROW_NUMBER () OVER (PARTITION BY stcd, z ORDER BY tm DESC)AS rnFROM dse_river_r),x1AS (SELECT STCD,TM,Z,MAX (z) OVER (PARTITION BY stcd) AS z_max,MIN (z) OVER (PARTITION BY stcd) AS z_minFROM x0WHERE rn = 1)
SELECT STCD, TM, ZFROM x1WHERE z IN (z_max, z_min)

View Code

好了,现在展示一下查询结果

(本文完)

转载于:https://www.cnblogs.com/boss-he/p/4713011.html

查询同一组的最大最小值及明细相关推荐

  1. 输入整数n(0<=n<=1000),紧接着在下一行连续输入n个数。随后输出这一组数的最小值和最大值。

    标题 输入整数n(0<=n<=1000),紧接着在下一行连续输入n个数.随后输出这一组数的最小值和最大值. ##解决方法 根据题意输入n个数可以用循环思想,并用if语句进行比较判断,最后进 ...

  2. 10-209 在订单表中查询运费的最大值和最小值

    分数 3 全屏浏览题目 切换布局 作者 刘冬霞 单位 山东理工大学 在订单表中查询运费的最大值和最小值. 表结构: 订单(订单编号 文本型,顾客编号 文本型,员工编号 文本型,订单日期 日期型,运费 ...

  3. 学生成绩查询(查最大值,最小值,平均值,升序,降序)

    调用方法来实现各个功能,并建立起一种交互界面 让用户选择,进行怎么样的功能 #include<stdio.h> #include<stdlib.h> int main() {f ...

  4. 求一组数据的最小值(C语言)

    [问题描述]输入一个正整数n,再输入n个整数,输出其中最小的值. [输入形式]先输入一个整数n,再根据n,输入n个数 [输出形式]输出最小值,形式:min=? [样例输入] 5 10 22 4 67 ...

  5. oracle 查询字段中文注释,oracle 查询表字段明细、字段注释、表注释

    查詢表字段明細 select  column_name,data_type,data_length,DATA_PRECISION ,DATA_SCALE from all_tab_columns wh ...

  6. 如何查询本人医保就医明细

    参保人凭本人的社会保障卡(或医疗保险卡)或身份证到医保中心服务窗口提出查询本人的就医明细,医保窗口工作人员在验证查询人为持证人本人后,通过查询系统,在输入参保人社保卡号(医保卡号或身份证号,三选一)后 ...

  7. 互联网金融平台——银行交易明细查询和报警机制

    一.关于前置机的报警机制:     1 .通道组每日巡检前置机的运行是否出现假死等问题,巡检每两个小时一次,上午 10 点至晚八点:     2 . 关键词监控,已经出现过假死的前置机或者 usb 不 ...

  8. mysql 名字分组查询id_mysql进阶5:分组查询

    /*语法: select 分组函数 列(要求出现在group by的后面) from 表 [where 筛选条件] group by 分组的列表 [order by 子句] 注意:查询列表必须特殊,要 ...

  9. mysql语句 查询前5个_MySQL 查询语句--------------进阶5:分组查询

    #进阶5:分组查询 /* select 分组函数,列(要求出现在group by的后面) from 表 [where 筛选条件] group by 分组的列表 [order by 子句] 注意: 查询 ...

  10. MySQL命令(二)| 表的增删查改、聚合函数(复合函数)、联合查询

    文章目录 新增 (Create) 全列插入 指定列插入 查询 (Retrieve) 全列查询 指定列查询 条件查询 关系元素运算符 模糊查询 分页查询 去重:DISTINCT 别名:AS 升序 or ...

最新文章

  1. python nginx日志分析_Nginx日志分析及脚本编写
  2. 序列化和反序列化的概念与延伸【详细解释 + 样例演示】
  3. php 屏蔽deprecated,新人求教PHP高手,Deprecated?
  4. boost跨平台 c++_跨平台C++整数类型 之一 固定宽度整数(boost和C++11)
  5. js和jquery书籍
  6. 零距离泛目录站群开源版源码
  7. libevent for android
  8. 380免费云存储_从四个方面分析:云存储服务的特点、影响
  9. bash算术求值和errexit陷阱
  10. 杭州市建筑物矢量数据(Shp格式+带高度)
  11. 灵格斯Lingoes词典及浏览器插件实现屏幕取词等功能的配置使用方法
  12. 在电脑上如何快速制作一寸照片?在线一键制作工具推荐给你
  13. 《MFC 控件透明处理》
  14. 【数据分析案例】如何定义你的“亲密关系”
  15. url 与 domain
  16. cogs 347 地震 splay
  17. 尚硅谷JavaWeb笔记——Filter过滤器(了解过滤器,看着一篇就够了)
  18. 【Segmentation】
  19. 处女座和小姐姐(模拟)
  20. B站硬核up主稚晖君:对于有志学习嵌入式开发的软件工程师,我有这些建议!...

热门文章

  1. dns服务期搭建使用_DNS服务器搭建
  2. python批量命名文件_用python实现批量重命名文件的代码
  3. python脚本实现ipv6的ddns功能
  4. 引入ELK前需要知道的“坑”(上)
  5. GAN 生成mnist数据
  6. linux 内核参数解释整理
  7. 非支架生成的情况下,验证错误信息输出方法,%= f.error_messages %错误
  8. 使用5502自带的UART口发送数据乱码的问题
  9. 浅析GestureDetector
  10. Apache RewriteCond on HTTP_COOKIE