GROUP BY子句但在列中具有连续(线性)值

时间:2017-08-21 13:05:28

标签: mysql sql

表架构:

id(P)     date      price

想要使用

"select date,price,count(price) from table group by price having count(price)>=5"

导致具有相同价格且不是线性的所有那些行(在这种情况下为5或更多)的组 例如。如果1,2,3,4,5,6是ids,5,6,7,8,9,10是日期,各自的价格为2,3,2,2,2,2 ,结果如下:

    date   price   count(*)
     5      2       5

但问题是我只想要那些连续5行或更多行具有相同价格的行。所以上述结果只有在价格序列如下时才会出现

2,2,2,2,2,3

感谢。

1 个答案:

答案 0 :(得分:1)

您需要按ORDER date记录并将计数(连续价格)存储到临时变量中,例如:

SELECT id, price, `date`, 
  IF(@previous = `price`, @count := @count + 1, @count := 1) AS `count`, 
  @previous := `price`
FROM test, (SELECT @previous := 0, @count := 1) a
ORDER BY date;

完成后,您可以将此查询包装到另一个SELECT中,并过滤计数大于5的记录,例如:

SELECT DISTINCT(b.price) FROM (
  SELECT id, price, `date`, 
    IF(@previous = `price`, @count := @count + 1, @count := 1) AS `count`, 
    @previous := `price`
  FROM test, (SELECT @previous := 0, @count := 1) a
  ORDER BY date
  ) b
  WHERE b.count >= 5;

这是 SQL Fiddle