2012-03-29 19 views
1

私は正規化されていないmysqlのテーブルを持っており、特定のフィールドでグループ化して最新の行を与えるようにクエリする必要があります。mysqlの正規化されていないデータから最新のものを選択してください

例えば表は

callername | callerdate | incoming | status 

のように見え、私は私ができる、NotAnsweredとして彼らの最新の状態を持っていると私はあなたがこれを行うだろう方法を見つけ出すことはできませんすべてのレコードを取得しようとしていますGROUP BY callernameしかし、私は最新の値を取得する方法を見つけることができません。

ありがとうございました。

+0

あなたには、いくつかのサンプルデータと希望Oを投稿することができます/ P – Teja

+0

はcallerdateが最新示していますか?ちょうど 'ORDER BY callerdate' – Cfreak

答えて

1
SELECT 
    yourTable.* 
FROM 
    yourTable 
INNER JOIN 
(
    SELECT 
    callername, 
    MAX(callerdate) AS callerdate 
    FROM 
    yourTable 
    GROUP BY 
    calledname 
) 
    AS mostRecent 
    ON mostRecent.callername = yourTable.callername 
    AND mostRecent.callerdate = yourTable.callerdate 
WHERE 
    yourTable.status='NotAnswered' 
+0

ありがとうございました。 – 111111

2
SELECT A.* FROM 
YOURTABLE A, 
( 
SELECT callername,callerdate,MAX(ID) AS ID 
FROM YOURTABLE 
WHERE status='NotAnswered' 
GROUP BY callername,callerdate 
) B 
WHERE A.ID=B.ID; 
+0

これは' ID'ではなく 'callerdate'です。あなたは 'のようなもの'に 'MAX(ID)'の別名を付ける必要があります。 'AND A.ID = B.ID'のような余分な結合述語が必要です。内部クエリではなく、外部クエリに 'status = 'NotAnswered''が必要です。 – MatBailie

+0

しかし彼の質問によれば、彼は各Callernameのために「Notanswered」として最新のステータスを必要とします。 – Teja

+0

私の最初の3つのポイントはそれとは関係ありません。そして私の最後のポイントは、最後の状態が何であっても、すべての通話を含めるためです。 (最も最近の '' NotAnswered''状態を表示しています。最新の状態が '' NotAnswered''である呼び出しではありません) – MatBailie

関連する問題