1

順序は重要ではないと結論付けたクエリを最適化しようとしています。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%が欠落しています。

4

1 に答える 1

1
SELECT item, price, timestamp
FROM SupplyDemand
INNER JOIN (
    SELECT item, MIN(timestamp) AS minimumtimestamp FROM SupplyDemand
) AS minimums
ON minimums.item = SupplyDemand.item AND minimums.minimumtimestamp = supplydemand.timestamp

片道になります。

于 2012-07-08T15:24:59.440 に答える