Sql查询在60秒内查找最大值

时间:2016-10-19 06:45:01

标签: sql sql-server tsql

假设我有一个如下表(使用不同的ID)...这里例如99 ...

id  hist_timestamp          DP  mints   Secnds  value
99  2016-08-01 00:09:40     1   9       40      193.214
99  2016-08-01 00:10:20     1   10      20      198.573
99  2016-08-01 00:12:00     1   12      0       194.432
99  2016-08-01 00:52:10     1   52      10      430.455
99  2016-08-01 00:55:50     1   55      50      400.739
99  2016-08-01 01:25:10     2   25      10      193.214
99  2016-08-01 01:25:50     2   25      50      193.032
99  2016-08-01 01:34:30     2   34      30      403.113
99  2016-08-01 01:37:10     2   37      10      417.18
99  2016-08-01 01:38:10     2   38      10      400.495
99  2016-08-01 03:57:00     4   57      0       190.413
99  2016-08-01 03:58:40     4   58      40      191.936

这里我有一个value列,从我需要在接下来的60秒内找到最大值的第一条记录开始,这将导致下面的结果。在这60秒的组中,我需要选择一个具有最大值的记录。

id  hist_timestamp          DP  mints   Secnds  value
99  2016-08-01 00:10:20     1   10      20      198.573
99  2016-08-01 00:12:00     1   12      0       194.432
99  2016-08-01 00:52:10     1   52      10      430.455
99  2016-08-01 00:55:50     1   55      50      400.739
99  2016-08-01 01:25:10     2   25      10      193.214
99  2016-08-01 01:34:30     2   34      30      403.113
99  2016-08-01 01:37:10     2   37      10      417.18
99  2016-08-01 03:57:00     4   57      0       190.413
99  2016-08-01 03:58:40     4   58      40      191.936

如何构建SQL查询以获得所需的输出?

谢谢!!!

1 个答案:

答案 0 :(得分:0)

这很简单。将GROUP BYMAX()功能一起使用。

示例:

select max(value) as value from table where hist_timestamp between '2016-08-01 00:10:00' and '2016-08-01 00:10:59' group by value

这为您提供了最大的唯一价值。希望它有所帮助

编辑:如果您需要更复杂的查询,例如从表格中的第一个日期开始每60秒的最大值,您需要例如递归CTE或更复杂的查询group by