SQL嵌套查询

时间:2009-08-11 10:22:39

标签: sql-server

我有一个包含PARAMETER_ID,Value和Time属性的表,我希望每个PARAMETER_ID都有它的min(值)和值最小值时的时间及其最大值(Value)和值最大值时的时间你能告诉我这个查询吗? 非常感谢

1 个答案:

答案 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;

我在另一个帖子中做的注释也适用于此。