使用复合主键查找MySQL时态数据库中的最新记录

时间:2012-04-24 13:51:48

标签: mysql

我遇到的问题非常类似于: Finding the 'earliest' composite primary key

但是,我使用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

感谢您的帮助。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

答案 2 :(得分: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)上的索引可能对性能有所帮助。