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

时间:2015-11-13 13:12:03

标签: sql oracle

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

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数据库。

5 个答案:

答案 0 :(得分:2)

您可以在查询中使用GROUP BY rg_id, start_month, end_month

答案 1 :(得分:2)

select distinct rgid,start_month,end_month from tbl_app_ranges;

答案 2 :(得分:1)

select rg_id, start_month, end_month from tbl_app_ranges
group by end_month, start_month, rg_id

答案 3 :(得分:1)

试试这个:

print

SQL DISTINCT子句示例将返回每个唯一的开始月份和月份月份组合。

答案 4 :(得分:0)

你问,

  

我知道这可以通过分析来完成,但不知道如何。

如果您想在 Google Analytics 中执行此操作,则可以使用 ROW_NUMBER()分析功能。

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_NUMBERPARTITION BY子句中指定的每个组分配有序的row_number。排序由ORDER BY子句处理。 Thsi成为内部子查询,外部查询根据row_number过滤行。