【问题标题】:How to Group consecutive records to fetch a record based on MAX and MIN of corresponding column?如何根据相应列的 MAX 和 MIN 对连续记录进行分组以获取记录?
【发布时间】:2023-01-26 22:44:31
【问题描述】:

我有一个数据库,其中包含不同类型的项目类型、连续的 HISTORY_ID、旧值和新值、我想过滤的字段标题和更改日期(可以不连续) enter image description here

尝试使用 ROW_NUMBER() OVER(PARTITION BY

我想得到类似的东西 enter image description here

【问题讨论】:

    标签: sql tsql


    【解决方案1】:

    尝试以下操作:

    select [item id],[item type id]
        ,grouped_old_value=first_value([Old Value]) over (partion by [item id],[item type id] order by History_ID desc)
        ,grouped_new_value=first_value([New Value]) over (partion by [item id],[item type id] order by History_ID  asc)
    from yourtable
    

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解你的问题,但无论如何我都会试一试。

      我认为您正在尝试根据时间获取项目的最旧和最新值。

      因为您想从最早的记录中找到 old_value 的值,并从最新的记录中找到 new_value 的值。

      要选择最旧的值,您需要按项目和项目类型进行分组,并在按日期排序时获取第一个项目(如果这些项目随时间递增,则为 ID)降序排列。 .

      选择您需要按项目和项目类型进行分组的最新值,并在按日期排序时获取第一个项目(如果这些值随时间递增,则为 ID)。上升。

      这将导致:

      select 
      [item id]
      ,[item type id]
      ,oldest_value = first_value([Old Value]) over (partition by [item id],[item type id] order by [History_ID] desc)
      ,newest_value = first_value([New Value]) over (partition by [item id],[item type id] order by [History_ID] asc)
      from table_name
      

      【讨论】:

        猜你喜欢
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-18
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        相关资源
        最近更新 更多