如何使用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。