2012-01-18 38 views
0

私は少しのmysqlクエリ脳凍結を持っています。私は2番目の列でグループ化されたテーブルから最新のレコードを取得する必要があります。このような何か:最新のレコードを取得

SELECT ca.id, ca.activity_date, cat.contact_id as cid 
FROM activity ca 
JOIN activity_target cat 
    ON ca.id = cat.activity_id 
WHERE ca.activity_type_id = 44 
GROUP BY cid 
ORDER BY activity_date DESC 

...ことを除いては、私が最も最近のレコード(activity_dateを使用して)(グループの後に実行されることにより、順序)によって内のグループを必要としています。 HAVING activity_date = max(activity_date)を使用してみましたが、動作しません。あなたのスキーマを見ずに

SELECT ca.id, ca.activity_date, cat.contact_id as cid 
FROM activity ca 
JOIN activity_target cat 
    ON ca.id = cat.activity_id 
WHERE ca.activity_type_id = 44 
    and ca.id = (SELECT id from activity a 
      join activity_target t on a.id = t.activity_id 
     WHERE t.contact_id = cat.contact_id 
     ORDER BY activity_date DESC LIMIT 1) 
ORDER BY activity_date DESC 

私は確かに言うことはできない、と私は、MySQLおよびMicrosoft SQL Serverの間の違いでビットを推測している:

+0

「contact_id」はどのテーブルに属していますか? –

+0

フィールドのソースを指定するために編集しました。 – lcdservices

+0

'activity_target'の主キーは何ですか? –

答えて

1

は、私はあなたがこのようにそれを行うことができると思います。

+0

それは問題である相関関係です。私が何かを逃していない限り、私は同じ穴に私を入れていると思う。 – lcdservices

+0

相関で編集されます。 – Chad

0
SELECT ca.id, ca.activity_date, cat.contact_id AS cid 
FROM activity ca 
    JOIN activity_target cat 
    ON ca.id = cat.activity_id 
    JOIN 
     (SELECT t.contact_id 
      , MAX(a.activity_date) AS activity_date 
     FROM activity a 
      JOIN activity_target t 
      ON a.id = t.activity_id 
     WHERE a.activity_type_id = 44 
     GROUP BY t.contact_id 
    ) AS grp 
    ON grp.contact_id = cat.contact_id 
    AND grp.activity_date = ca.activity_date 
WHERE ca.activity_type_id = 44 
ORDER BY ca.activity_date DESC