【发布时间】:2023-01-26 22:44:31
【问题描述】:
我有一个数据库,其中包含不同类型的项目类型、连续的 HISTORY_ID、旧值和新值、我想过滤的字段标题和更改日期(可以不连续) enter image description here
尝试使用 ROW_NUMBER() OVER(PARTITION BY
我想得到类似的东西 enter image description here
【问题讨论】:
我有一个数据库,其中包含不同类型的项目类型、连续的 HISTORY_ID、旧值和新值、我想过滤的字段标题和更改日期(可以不连续) enter image description here
尝试使用 ROW_NUMBER() OVER(PARTITION BY
我想得到类似的东西 enter image description here
【问题讨论】:
尝试以下操作:
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
【讨论】:
我不确定我是否完全理解你的问题,但无论如何我都会试一试。
我认为您正在尝试根据时间获取项目的最旧和最新值。
因为您想从最早的记录中找到 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
【讨论】: