0

私はクエリを書きました:

SELECT TimeStamp, FwdHr, W FROM Meter_Data 
WHERE TimeStamp Between 1356908255 AND 1356944255 
OR (TimeStamp BETWEEN 1356911855 AND 1356947855) 
OR (TimeStamp BETWEEN 1356915455 AND 1356951455) 
OR (TimeStamp BETWEEN 1356919055 AND 1356955055) 
OR (TimeStamp BETWEEN 1356922655 AND 1356958655) 
AND MeterID = @meterID 
AND DeviceID = @deviceID 
ORDER BY TimeStamp

しかし問題は、節ごとに複数のレコードを返すことですが、私は1つだけ欲しいです。LIMIT は、クエリ全体で合計レコード数を 1 に制限します。だからそれを使用することはできません。助けてください!

4

2 に答える 2

0

MySQL では、変数を使用してこれを行うことができます。1 つのアプローチを次に示します。

SELECT TimeStamp, FwdHr, W
FROM (select md.*, 
             (case when TimeStamp Between 1356908255 AND 1356944255 then @rn1 := @rn1 + 1
                   when TimeStamp BETWEEN 1356911855 AND 1356947855 then @rn2 := @rn2 + 1
                   when TimeStamp BETWEEN 1356915455 AND 1356951455 then @rn3 := @rn3 + 1
                   when TimeStamp BETWEEN 1356919055 AND 1356955055 then @rn4 := @rn4 + 1
                   when TimeStamp BETWEEN 1356922655 AND 1356958655 then @rn5 := @rn5 + 1
              end) as rn
      from Meter_Data cross join
           (select @rn1 := 0, @rn2 := 0, @rn3 := 0, @rn4 := 0, @rn5 := 0) const
      WHERE MeterID = @meterID AND DeviceID = @deviceID 
     ) md
where rn = 1
ORDER BY TimeStamp;

これにより、グループごとに個別の変数が定義されます。次に、表示されると変数をインクリメントし、結果をrn「列」に返します。これは、最初に見つかった値を選択するだけです。

于 2013-06-04T13:18:15.073 に答える