0

「最も早い」複合主キーの検索に非常に似た問題があり ます

ただし、MySQL 5.0.77 を使用しており、最新のレコードのみを取得する必要があります。私のテーブル、TABLE_1 は次のようになります。

OID     PROP_TYPE     EFFECTIVE_DATE        PROP_VALUE
-----   ----------    -------------------   ----------
00123   NA010         2003-05-30 15:52:15   JAMES
00123   NA010         2004-02-30 10:12:18   FRED
00123   NA011         2003-05-30 08:25:41   WILLIAMS
00123   NA011         2006-01-15 22:12:38   DANIELS
00123   NA012         2003-05-30 08:25:41   (704) 242-2124

OID、PROP_TYPE、EFFECTIVE_DATEの複合キーがあるので、以下を取得するselect文を探しています。

OID       PROP_TYPE    EFFECTIVE_DATE       PROP_VALUE
-----     ---------    -------------------   -------
00123     NA010        2004-02-30 10:12:18   FRED
00123     NA011        2006-01-15 22:12:38   DANIELS
00123     NA012        2003-05-30 08:25:41   (704) 242-2124

助けてくれてありがとう。

4

3 に答える 3

1

多分このようなもの:

SELECT
    t.*
FROM
    TABLE_1 AS t
    JOIN 
    (
        SELECT
            MAX(t2.EFFECTIVE_DATE) AS EFFECTIVE_DATE,
            t2.PROP_TYPE,
            t2.OID
        FROM
            TABLE_1 AS t2
        GROUP BY
            t2.PROP_TYPE,
            t2.OID
    ) AS MaxDate
    ON t.EFFECTIVE_DATE=MaxDate.EFFECTIVE_DATE
    AND t.PROP_TYPE=MaxDate.PROP_TYPE
    AND t.OID=MaxDate.OID
于 2012-04-24T14:00:41.190 に答える
0

これを試して:

select OID, PROP_TYPE, EFFECTIVE_DATE, PROP_VALUE
  from TABLE_1
 where OID, PROP_TYPE, EFFECTIVE_DATE in
  (select OID, PROP_TYPE, MAX(EFFECTIVE_DATE) from TABLE_1 group by OID, PROP_TYPE)
于 2012-04-24T13:56:20.610 に答える
0
SELECT 
    t.*
FROM 
        TABLE_1 AS t
    JOIN
        ( SELECT oid, prop_type, MAX(effective_date) AS effective_date
          FROM TABLE_1 
          GROUP BY oid, prop_type
        ) AS g
      ON  (g.oid, g.prop_type, g.effective_date)
        = (t.oid, t.prop_type, t.effective_date)

インデックスをオンに(oid, prop_type, effective_date, prop_value)すると、パフォーマンスが向上する可能性があります。

于 2012-04-24T14:03:59.673 に答える