0

我想使用下面的查询根据时间戳列每 15 分钟对记录进行一次分组,但前两条记录的差异只有 10 分钟。

导轨代码:

select("DATE_FORMAT(reading_on,'%H:%i') as date,
  ROUND(UNIX_TIMESTAMP(reading_on)/(900)) as fif ,
  max(power) as total").group("fif").where("imei= #{site}" ).order("fif asc")

MYSQL查询:

SELECT DATE_FORMAT(reading_on,'%H:%i') as date,
  ROUND(UNIX_TIMESTAMP(reading_on)/(900)) as fif ,
  max(power) as total FROM `clarodetails` 
WHERE (imei= 353469040778516) 
  AND (date(reading_on) between '2012-11-18 00:00:00' 
  AND '2012-11-18 23:59:59') 
GROUP BY fif 
ORDER BY fif asc LIMIT 15

输出: 输出

4

2 回答 2

1

你可以使用这个:

SELECT
  DATE_FORMAT(
    FROM_UNIXTIME(UNIX_TIMESTAMP(reading_on) -
      MOD(UNIX_TIMESTAMP(reading_on), 900)), '%H:%i') as fif,
  max(power) as total
FROM `clarodetails` 
WHERE
  (imei= 353469040778516) 
  AND (date(reading_on) >= '2012-11-18')
  AND (date(reading_on) <  '2012-11-19') 
GROUP BY fif 
ORDER BY fif asc LIMIT 15

我也不想使用between '2012-11-18 00:00:00' and '2012-11-18 23:59:59'(你总是会错过一些reading_on在 23:59:59 之后但在午夜之前的记录......)

于 2012-11-24T12:11:37.183 回答
0

这可能是由于混合了聚合函数和非聚合函数。第一个结果列未聚合,因此结果集显示查询遇到的该列的第一个值。在聚合中包含日期列:

...GROUP BY fif, date...
于 2012-11-24T11:45:17.683 回答