1

デバイスの読み取り値を保持するデータベースがあります。デバイスから最新の読み取り値を選択できるクエリを作成しようとしています。一見同じように見え、同じ結果が得られると予想される 2 つのクエリがあります。ただし、そうではありません。クエリは次のとおりです。

最初のクエリ:

select max(datetime), reading
from READINGS
where device_id = '1234567890'

2 番目のクエリ:

select datetime, reading
from READINGS
where device_id = '1234567890' and datetime = (select max(datetime)
                                               from READINGS
                                               where device_id = '1234567890')

どちらも読み取り属性の結果が異なります。2 番目は正しい結果を与えるものですが、なぜ最初の結果が異なるのでしょうか?

4

4 に答える 4

3

これは、MySQL の動作です。グループ化を使用する場合、選択する列は group by に表示されるか、min()、max() などの集計関数である必要があります。集計と通常の列を混在させることは、他のほとんどのデータベース フレーバーでは許可されていません。

最初のクエリは、各グループの最初の評価 (ファイル システム上のどこに表示されるかという意味で最初) を返すだけですが、これはおそらく間違っています。

2 番目のクエリは、レーティングと最大タイム スタンプを関連付けて正しい結果を導きます。

于 2012-06-29T14:02:46.300 に答える
2

これはGROUP BY reading、両方のクエリで使用する必要がある句を使用していないためです。

于 2012-06-29T14:00:08.157 に答える
1

これは MySQL では正常です。これに関するドキュメントを参照してください。

If you use a group function in a statement containing no GROUP BY clause, it is equivalent to grouping on all rows. 

また、 http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.htmlを読んでください

于 2012-06-29T14:09:00.660 に答える
0

ExplainおよびExplan拡張コマンドを使用して、クエリについて詳しく知ることができます。

于 2012-06-29T14:03:44.007 に答える