回答

收藏

SQL按日期范围折叠重复值的查询

技术问答 技术问答 104 人阅读 | 0 人回复 | 2023-09-13

我有一个结构如下的表:ID,Month,Year,Value,每个ID每月一个条目的值,大多数月都有相同的值。& }" t# {8 m' v9 O: T0 M6 j9 q2 W
我想为该表创建一个折叠如下所示相同值的视图:ID,开始月、结束月、开始年、结束年、值ID一行。8 v" Y8 W8 Q0 V; V% g
需要注意的是,如果值发生变化并返回原始值,则表中应有两行
+ x0 w( N& ?7 Y0 \, ^2 y8 d3 I  D- }所以:
! C& s+ t. ~0 l- F3 R6 E100 1 2008 80
) X) c# `4 u; Z1 N# {6 j8 {7 y100 2 2008 80
- s+ Z: E" y  B" B3 x4 X100 3 2008 90$ X( Q: h1 r* c0 O* H
100 4 2008 80
应该产生  L8 D1 k0 C) C3 ?6 a
100 1 2008 2 2008 80* v, P( u& `& u; Q- d* z
100 3 2008 3 2008 906 ~2 Q1 S2 E  c% U3 Z
100 4 2008 4 2008 80
当值返回原始值时,以下查询适用于除特殊情况外的所有情况。: `6 M7 V1 g4 V6 y4 ^7 {
select distinct id,min(month) keep (dense_rank first order by month) over (partition   by id,value) startMonth,max(month) keep (dense_rank first order by month desc) over (partitionby id,value) endMonth,value数据库就是Oracle
' u' @! z5 j) D; Q                                                                . n4 L) ?# C8 M, i
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则