0

以下のクエリを使用して、タイムスタンプ列に基づいて 15 分ごとにレコードをグループ化したいのですが、最初の 2 つのレコードの違いはわずか 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

私も使用しないことを好みます( 23:59:59 以降で真夜中前between '2012-11-18 00:00:00' and '2012-11-18 23:59:59'のレコードは常に見逃す可能性があります...)reading_on

于 2012-11-24T12:11:37.183 に答える
0

これはおそらく、集計関数と非集計関数が混在していることが原因です。最初の結果列は集計されていないため、結果セットには、クエリが検出したこの列の最初の値が表示されます。集計に日付列を含めます。

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