Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Oracle SQL选择不同的日期范围_Sql_Oracle - Fatal编程技术网

如何使用Oracle SQL选择不同的日期范围

如何使用Oracle SQL选择不同的日期范围,sql,oracle,Sql,Oracle,我希望从以下结构的表中获得具有开始和结束日期的不同行。我不希望重复行具有相同的开始和结束月份。请注意,此处的开始和结束日期是数字类型,而不是日期 tbl_app_ranges: rg_id start_month end_month 105 200401 200409 105 200401 200409 110 200701 200712 110 200701 200710

我希望从以下结构的表中获得具有开始和结束日期的不同行。我不希望重复行具有相同的开始和结束月份。请注意,此处的开始和结束日期是数字类型,而不是日期

tbl_app_ranges:
rg_id   start_month   end_month
105     200401        200409    
105     200401        200409    
110     200701        200712    
110     200701        200710     
我想要的是下面的结果集

rg_id   start_month   end_month
105     200401        200409    
110     200701        200712    
110     200701        200710     

我知道这可以通过分析来实现,但不确定如何实现。有没有一种方法可以在纯SQL中实现这一点?我需要查询来处理Oracle数据库。

您可以在查询中使用
按rg\u id分组、开始月、结束月

您可以在查询中使用
按rg\u id分组、开始月、结束月

尝试以下操作:

select rg_id, start_month, end_month from tbl_app_ranges
group by end_month, start_month, rg_id
SELECT DISTINCT start_month   , end_month 
FROM tbl_app_ranges;
SQL DISTINCT子句示例将返回每个唯一的开始月份和结束月份组合

试试这个:

SELECT DISTINCT start_month   , end_month 
FROM tbl_app_ranges;
SQL DISTINCT子句示例将返回每个唯一的开始月份和结束月份组合

你问

我知道这可以通过分析来实现,但不确定如何实现

如果要在分析中执行此操作,则可以使用分析函数

select rg_id, start_month, end_month from (
select rg_id,
       start_month,
       end_month,
       ROW_NUMBER() OVER(PARTITION BY rg_id, 
                                      start_month, 
                                      end_month 
                         ORDER BY rg_id) rn        
from tbl_app_ranges)
WHERE rn = 1;
查询的工作原理:

ROW\u编号
按照
PARTITION BY
子句中的指定,为每个组分配一个有序的ROW\u编号。排序由
ORDER by
子句负责。Thsi成为内部子查询,外部查询根据您询问的
行编号

过滤行

我知道这可以通过分析来实现,但不确定如何实现

如果要在分析中执行此操作,则可以使用分析函数

select rg_id, start_month, end_month from (
select rg_id,
       start_month,
       end_month,
       ROW_NUMBER() OVER(PARTITION BY rg_id, 
                                      start_month, 
                                      end_month 
                         ORDER BY rg_id) rn        
from tbl_app_ranges)
WHERE rn = 1;
查询的工作原理:


ROW\u编号
按照
PARTITION BY
子句中的指定,为每个组分配一个有序的ROW\u编号。排序由
ORDER by
子句负责。Thsi成为内部子查询,外部查询根据
行号

过滤行,不需要派生表。不需要派生表。使用
DISTINCT/UNIQUE
按rg\u id分组,开始月份,结束月份
。使用
DISTINCT/UNIQUE
按rg\u id分组,开始月份,月末
DISTINCT
将在内部执行
分组操作
+答案是1。
DISTINCT
将在内部执行
分组操作+答案是1。