我有一个看起来像这样的表: http://sqlfiddle.com/#!9/152d2/1/0
CREATE TABLE Table1 (
id int,
value decimal(10,5),
dt datetime,
threshold_id int
);
当前查询:
SELECT sensors_id, DATE_FORMAT(datetime, '%Y-%m-%d'), MIN(value), MAX(value)
FROM Readings
WHERE datetime < "2015-11-18 00:00:00"
AND datetime > "2015-10-18 00:00:00"
AND sensors_id = 9
GROUP BY DATE_FORMAT(datetime, '%Y-%m-%d')
ORDER BY datetime DESC
我要做的是返回每个组中的最小/最大值,其中threshold_id是非NULL。因此,该示例应返回如下内容:
min_value | max_value | start_date | end_date
9 | 10.5 | 2015-07-29 10:52:31 | 2015-07-29 10:57:31
8.5 | 9.5 | 2015-07-29 11:03:31 | 2015-07-29 11:05:31
我无法弄清楚如何进行此分组。我需要为threshold_id IS NOT NULL的每组连续行返回最小值/最大值。
答案 0 :(得分:0)
您的样本数据仅包含一天的价值,因此您只需返回一行(假设您希望按天分组):
with_items:
- { regexp: '^AcceptEnv\s', line: 'AcceptEnv LANG LC_* P4* GIT_* HGUSER RD_*' }
答案 1 :(得分:0)
使用用户变量将现有值与之前的值进行比较,并增加一个可用于分组的列,并在我的机器上进行测试。
SELECT MIN(value),MAX(value),MIN(dt),MAX(dt)
FROM (
SELECT id,value,dt,
CASE WHEN COALESCE(threshold_id,'')=@last_ci THEN @n ELSE @n:=@n+1 END AS g,
@last_ci := COALESCE(threshold_id,'') As th
FROM
Table1, (SELECT @n:=0) r
ORDER BY
id
) s
WHERE th!=''
GROUP BY
g