多语言展示
当前在线:1884今日阅读:175今日分享:29

sql 查询分组最大值最小值和对应发生时间

在SQL查询中,查询分组最大最小值可以使用Group By,但是需要同时获得最大值/最小值发生时间的情况下,Group By并不适用,此时可使用本文介绍的方法。
工具/原料

SQL Server 2008

问题描述
1

假设“测值表”结构和内容如图所示,需要查询每一个测点测值的最大值/最小值及发生时间

2

使用Group By可以查询得到每个测点的最大值/最小值,但是需要同时查询发生时间时,会出现错误:“选择列表中的列 '测值表.时间' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。”

3

针对这一需求,有两种嵌套查询方法,一种是在嵌套查询中使用笛卡尔积,一种是在嵌套查询中使用连接查询。

解决方法
1

求最大值,注意图中红线标出的语句select 测点编号, 测值 as 最大值, 时间 from 测值表 where ID not in (select a.ID from 测值表 a,测值表 b where a.测值

2

求最小值,注意图中红线标出的语句select 测点编号, 测值 as 最小值, 时间 from 测值表 where ID not in (select a.ID from 测值表 a,测值表 b where a.测值>b.测值 and a.测点编号=b.测点编号); select 测点编号, 测值 as 最小值, 时间 from 测值表 where ID not in (select a.ID from 测值表 a inner join 测值表 b on a.测点编号=b.测点编号 where a.测值>b.测值);

推荐信息