0

さて、私は現在、電子機器の部品に関する情報を表示するWebサイトに取り組んでいます。これらの部分は時々改訂されます。部品番号は同じままですが、部品番号にA、B、Cなどが追加されるため、文字が「高い」ほど新しいものになります。また、日付が追加されます。したがって、テーブルは次のようになります。

------------------------------------------------------------
| Partcode       |   Description        | Partdate         |
------------------------------------------------------------
| 12345A         | Some description 1   | 2009-11-10       |
| 12345B         | Some description 2   | 2010-12-30       |
| 17896A         | Some description 3   | 2009-01-12       |
| 12345C         | Some description 4   | 2011-08-06       |
| 17896B         | Some description 5   | 2009-07-10       |
| 12345D         | Some description 6   | 2012-05-04       |
------------------------------------------------------------

今必要なのは、パーツの最新リビジョンのデータです。したがって、この例では、次のものが必要です。

12345Dおよび17896B

一部の人が私の前に構築したクエリは、次のようなものです。

SELECT substring(Partcode, 1, 5) AS Part,
       (
            SELECT pt.Partcode
            FROM Parttable pt
            WHERE substring(pt.PartCode, 1, 5) = Part
            ORDER BY pt.Partdate DESC
            LIMIT 0,1
       ),
       (
            SELECT pt.Description
            FROM Parttable pt
            WHERE substring(pt.PartCode, 1, 5) = Part
            ORDER BY pt.Partdate DESC
            LIMIT 0,1
       ),
       (
            SELECT pt.Partdate
            FROM Parttable pt
            WHERE substring(pt.PartCode, 1, 5) = Part
            ORDER BY pt.Partdate DESC
            LIMIT 0,1
       )
FROM Parttable
GROUP BY Part

ご存知のように、このクエリはめちゃくちゃ遅く、本当に非効率的だと感じます。しかし、このクエリを最適化する方法について頭を悩ませることはできません。

だから私は本当に誰かが助けてくれることを願っています。

前もって感謝します!

PS。私はMySQLデータベースに取り組んでいますが、誰かが尋ねる前に、データベースを変更することはできません。

4

1 に答える 1

1

まず、バージョン変数を別の列に保存してみませんか?このように、最初にそれを抽出するために部分文字列を呼び出す必要はありません。コードとバージョンを連結する必要がある場合は、最後にそれを行うことをお勧めします。

次に、あなたの代わりに、最初にコードとバージョンを分割し、次のように集計クエリでmaxを使用します。

SELECT code,max(version) FROM
  (SELECT substring(Partcode, 5, 1) as code,
         substring(Partcode, 1, 5) as version
  FROM Parttable
  )
AS part
GROUP BY code;

注:このクエリはテストしていないため、部分文字列インデックスなどのいくつかのパラメータを修正する必要がある場合があります。

于 2012-05-24T07:17:24.440 に答える