我有一个包含PARAMETER_ID,Value和Time属性的表,我希望每个PARAMETER_ID都有它的min(值)和值最小值时的时间及其最大值(Value)和值最大值时的时间你能告诉我这个查询吗? 非常感谢
答案 0 :(得分:1)
在Max贴出的链接上,向下滚动到Mancaus的答案,这是最好的。当然,这假定您使用的SQL方言支持ROW_NUMBER()和RANK()。
至于你的具体问题,它与this question非常相似。这是一个解决方案(未经测试,因为您没有提供带有示例数据的任何CREATE TABLE或INSERT语句)。我省略了最后一个轴,以便为每个PARAMETER_ID获取最小/最大值和时间到同一行。此外,如果对于给定的PARAMETER_ID,最大值或最小值在不同时间出现两次,这将为您提供最近的事件。
with TRanked(PARAMETER_ID,Value,Time,upRank,downRank) as (
select PARAMETER_ID,Value,Time,
row_number() over (
partition by PARAMETER_ID
order by Value, Time desc
),
row_number() over (
partition by PARAMETER_ID
order by Value desc, Time desc
)
from T
), T_extremes(PARAMETER_ID,tag,Value,Time) as (
select
PARAMETER_ID, 'min', Value, Time from TRanked where upRank = 1
union all
PARAMETER_ID, 'max', Value, Time from TRanked where downRank = 1
)
select * from T_extremes;
我在另一个帖子中做的注释也适用于此。