1

次の表があります。

ID Name State Date
1   A1   First 1/10/2013
2   A1   Second 1/11/2013
3   A1   Last   1/12/2013
4   A2   First  1/10/2013
5   A2   Closed 1/11/2013
6   A3   First  1/10/2012
7   A3   Second 1/10/2012

状態の優先順位は以下の通り

 1 First
 2 Second
 3 Last
 4 Closed

つまり、名前の最新の状態のみを表示する必要があります (状態が閉じていない場合。状態が閉じている場合、その ID を表示する必要はありません)。

したがって、上記の表の出力は次のようになります。

ID Name State Date
3  A1    Last  1/12/2013
7  A3    Second 1/10/2012

どうすればよいかわかりません。知っていれば何かを試したでしょうが、今のところ苦労しています。これを実行してphp、出力を別の場所に保存してtable/view表示できますが、データベースで行う必要があります。

ありがとう

4

2 に答える 2

1

IDあなたがauto_incrementedであると仮定します。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  name, MAX(ID) max_ID
            FROM    tableName
            GROUP   BY Name
        ) b ON  a.ID = b.max_ID AND
                a.Name = b.Name
WHERE   a.State <> 'Closed'

または列の日付のデータ型がDATE

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  name, MAX(date) max_date
            FROM    tableName
            GROUP   BY Name
        ) b ON  a.ID = b.max_date AND
                a.Name = b.Name
WHERE   a.State <> 'Closed'

于 2013-02-01T01:31:10.157 に答える
0

私もそのような解決策を持ってきましたが、私のほうが速いかどうかはわかりません。

SELECT * FROM 
    (SELECT id, name, state, date FROM myTable ORDER BY state DESC, id DESC) AS subQuery
WHERE state <> 'Closed' GROUP BY name

編集: GROUP BYは最後のアイテムではなく最初のアイテムのみを返すため、この方法で試しました。最初に、探しているアイテムを最初に配置してからグループ化することで、それを取得できます。

于 2013-02-01T01:46:05.530 に答える