2

データベースに次のデータがあります

|NO | name  |exp   | mod_date          | 
+---+-------+------+-------------------+
|1  | dede  |  1   |2012-11-07 01:04:26|
|2  | dede  |  10  |2012-11-07 01:05:42|
|3  | GoGo  |  20  |2012-11-07 03:05:40|
|4  | baba  |  23  |2012-11-07 05:22:50|
|5  | baba  |  35  |2012-11-07 08:06:57|
|6  | baba  |  50  |2012-11-08 06:32:13|
|7  | rara  |  43  |2012-11-13 06:40:35|

各名前の最終更新 mod_date を取得したい:

|NO | name  |exp   | mod_date          | 
+---+-------+------+-------------------+
|2  | dede  |  10  |2012-11-07 01:04:26|
|3  | GoGo  |  20  |2012-11-07 03:05:40|
|6  | baba  |  50  |2012-11-08 06:32:13|
|7  | rara  |  43  |2012-11-13 06:40:35|

私はこの解決策を試しましたが、うまくいきませんでした(同じ質問

SELECT no,name,exp,max(date) FROM skill_exp
GROUP BY name

そして、そのクエリからこの結果を取得します

|NO | name  |exp   | mod_date          | 
+---+-------+------+-------------------+
|1  | dede  |  1   |2012-11-07 01:05:42|
|3  | GoGo  |  20  |2012-11-07 03:05:40|
|4  | baba  |  23  |2012-11-07 05:22:50|
|7  | rara  |  43  |2012-11-13 06:40:35|
4

2 に答える 2

1

サブクエリの背後にある考え方は、名前ごとに最新 ( maximum )を個別に取得するというものです。mod_Dateその結果は元のテーブルに結合され、各行の他の列が取得されます。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT name, MAX(mod_date) maxDate
            FROM tableName
            GROUP BY name
        ) s ON  a.name = s.name AND
                a.mod_date = s.maxDate
于 2013-01-02T08:55:55.167 に答える
1

もう1つの簡単な方法SELF JOIN

select max(t1.no) NO,t1.name,max(t1.exp),max(t1.mod_date) from tablename t1
inner join tablename t2
on t1.name=t2.name
where t1.mod_date>=t2.mod_date
group by t1.name order by t1.No

SQL_LIVE_DEMO

于 2013-01-02T09:50:50.800 に答える