MySQL - 获取一系列行

时间:2015-11-18 16:12:46

标签: mysql

我有一个看起来像这样的表: 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的每组连续行返回最小值/最大值。

2 个答案:

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

FIDDLE