順序は重要ではないと結論付けたクエリを最適化しようとしています。ORDER BY
したがって、次のシナリオで削除しようとしています。
SELECT item, price FROM supplydemand
GROUP BY item
ORDER BY timestamp ASC
何が起こっているかです:テーブルsupplierdemandはさまざまなアイテムの価格を追跡します。アイテムごとに4つまたは5つの異なる価格があるため、行が異なります。上記のクエリは、アイテムごとの「最も古い」価格を示しています。グループ化はアイテムに対して行われ、タイムスタンプの昇順で最も古い行が表示されます。このクエリは正しく機能します。
私が最も古い価格を持っている限り、返された行がソートされているかどうかは実際には気にしないことに気づきました。だから私はを取り除きたいと思いましたORDER BY
。これが私が試したことです:
SELECT item, price, timestamp FROM supplydemand
GROUP BY item
HAVING timestamp = MIN(timestamp)
上記のクエリは、並べ替えられていないことを除いて、同じデータになるはずです。したがって、MIN
内部は、グループ化されたすべてのアイテムのタイムスタンプをグループ内の最も古いタイムスタンプと比較するHAVING
ことに依存する必要があります。GROUP
問題
2番目のクエリはより少ない行を返します。何らかの理由で、2番目のクエリから特定の行が欠落しており、その理由がわかりません。残りの行は同じ価格を返しますが、データのほぼ20%が欠落しています。