【问题标题】:Transform Table by Date into a New From-To Table按日期将表转换为新的 From-To 表
【发布时间】:2020-06-08 04:17:47
【问题描述】:

我们在铁路上有一个基础设施系统。所有组件都有 Valid_From 和 Valid_To 日期。对于给定的项目,我们最多需要连接 8 个表,并且每个层可以有不同的时期。因此,正确组合每一层的唯一快速方法是使用日期表执行此操作。 工作正常且正确。 但现在我以这样的表格为例。

CREATE TABLE [ods_tr_amelie].[INES_DATA_PREP_INES_ROUTING_OK]
(
    [MAP_DATE] [DATE] NULL,
    [FROM_ID_PK] [BIGINT] NOT NULL,
    [FROM_INES_KPO] [INT] NULL,
    [TO_ID_PK] [BIGINT] NOT NULL,
    [ROUT_MAX_SPEED] [INT] NULL
)
WITH
(
    DISTRIBUTION = HASH ( [MAP_DATE] ),
    CLUSTERED COLUMNSTORE INDEX
)

现在我想将其转换回 VALID_FROM - VALID_TO 表。但是......由于这是在 Azure SQL 数据仓库上运行,我不能使用游标,必须在正常的选择中完成,并在需要时引用自身。

创建周期的关键是 FROM_ID_PK、FROM_INES_KPO、TO_ID_PK 和 ROUT_MAX_SPEED。

MIN(MAP_DATE) 和 MAX(MAP_DATE) 不正确,如下面的简化数据示例所示。

MAP_DATE   SYMBOLIC_KEY
01/01/2020 VALUE_X
01/02/2020 VALUE_Y
01/03/2020 VALUE_X
01/04/2020 VALUE_X

MIN_MAX 将创建

SYMBOLIC_KEY VALID_FROM VALID_TO
VALUE_X      01/01/2020 01/04/2020
VALUE_Y      01/02/2020 01/02/2020

想要的结果是

SYMBOLIC_KEY VALID_FROM VALID_TO
VALUE_X      01/01/2020 01/01/2020
VALUE_Y      01/02/2020 01/02/2020
VALUE_X      01/03/2020 01/04/2020

任何建议都会很棒..

【问题讨论】:

    标签: sql azure-sqldw azure-sql-data-warehouse


    【解决方案1】:

    这是一个孤岛问题。您可以使用row_number() 和聚合:

    select symbolic_value, min(map_date), max(map_date)
    from (select t.*,
                 row_number() over (order by map_date) as seqnum,
                 row_number() over (partition by symbolic_value order by map_date) as seqnum_1
          from INES_DATA_PREP_INES_ROUTING_OK t
         ) t
    group by symbolic_value, (seqnum - seqnum_1);
    

    注意:您的数据在日期中没有间隔。这个版本忽略了差距。如果您希望他们创建单独的组,那么:

    select symbolic_value, min(map_date), max(map_date)
    from (select t.*,
                 row_number() over (order by map_date) as seqnum
          from INES_DATA_PREP_INES_ROUTING_OK t
         ) t
    group by symbolic_value, datediff(day, - seqnum, map_date);
    

    【讨论】:

      猜你喜欢
      • 2022-10-19
      • 2022-08-13
      • 1970-01-01
      • 2015-10-13
      • 2021-03-20
      • 2017-05-14
      • 1970-01-01
      • 2021-09-29
      • 2014-07-29
      相关资源
      最近更新 更多