Chinaunix首页 | 论坛 | 博客
  • 博客访问: 73158
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-07 10:00
个人简介

迷糊

文章分类

全部博文(19)

文章存档

2021年(2)

2018年(3)

2016年(2)

2015年(12)

我的朋友

分类: Oracle

2021-10-18 09:48:36

    在工作中,经常需要得到每年,每月的最小时间对应的值。不想用嵌套,只用一个sql语句如何时间?
来看个例子。
步骤一 建一个2020年每天时间的表,每天有个对应的Number_s随机数
   要求每个月最小时间对应的number_s是多少,怎么求呢?


点击(此处)折叠或打开

  1. create table PROCEDRE_TABLE

  2. (

  3.   year_ch VARCHAR2(11), --年份

  4.   month_ch VARCHAR2(11), --月份

  5.   price_date DATE, --日期

  6.   number_s NUMBER --数字

  7. );
  查看表里面的数据,2020年每天对应的随机数number_s

         


步骤二 2020每个月的最小时间对应的的值


方法一:使用嵌套方法,只能得到求2020年1月10日的值,也就是一个月的值,无法得到所求。

    

点击(此处)折叠或打开

  1. SELECT * FROM PROCEDRE_TABLE WHERE daily = (SELECT MIN(daily) FROM PROCEDRE_TABLE)


 

方法二:用分析函数first_value和row_number结合得到每个月的最小时间对应的值。


点击(此处)折叠或打开

  1. SELECT *

  2. FROM

  3. (

  4. SELECT year_ch,month_ch,daily,first_value(number_s) OVER (PARTITION BY daily ),

  5. row_number() OVER (PARTITION BY month_ch ORDER BY daily ) AS rn

  6. FROM PROCEDRE_TABLE

  7. )

  8. WHERE rn =1


  
    分析函数不明白吗,请留言!


阅读(766) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~