2017-10-11 5 views
-1

私は履歴レコードのテーブルを持っており、どちらも日付を持っているので履歴レコードが作成され、その履歴レコードに対してコメントを記録するコメントテーブルがあります。結合されたテーブルからレコードを選択するときは、可能であれば、各AテーブルレコードのB(結合)テーブルから最新のレコードを取得します。

私はテーブルを調べるときに、すべての履歴レコードと、それぞれの最新のコメントが必要です。残念ながら、以前の履歴レコードにコメントが追加された場合、このクエリは最新の履歴レコード(正しい)を返しますが、最新のコメント全体(不正確なもの)が返されるため、私が見ている履歴記録の最新のコメントの代わりに。

はここ

SELECT h.id 
    , c.id comment_id 
    , c.comment recent_comment 
    , h.* 
    FROM crm_device_history h 
    LEFT 
    JOIN crm_device_history_comments c 
    ON c.crm_device_history_id = h.id 
    AND c.id = (SELECT max(id) 
        FROM crm_device_history_comments 
       WHERE c.crm_device_history_id = h.id) 
WHERE device_id = 147 
    AND crm_history_states_id >= 0 
ORDER 
    BY h.id DESC 

crm_device_historyテーブル

id 
device_id 
crm_history_states_id 
userID 
dateTime 
system_comment 
comment -> this field is to be dropped now we have a separate table 
distributor_assignment 
client_assignment 
updated_date 
created_date 

crm_device_history_comments

id 
crm_device_history_id 
comment 
user_id 
updated_date 
+0

を試してみてください –

+1

質問にスキーマ、サンプルデータ、現在の結果、期待される結果を追加してください。それは本当に役に立つでしょう。 –

+0

私は最新の履歴レコード(h.id)とその行に最新のコメント(recent_comment)が表示されることを期待しています。私が実際に得たのは最新の履歴レコードですが、全体的な最新のコメントもあります(私が見ている履歴レコードに適用された最新のものではなく、コメントテーブルの最新のコメント) – Rich

答えて

-1

この

を試してみてください、私たちのMySQLです
SELECT h.id, 
     c.id  AS comment_id, 
     c.comment AS recent_comment, 
     h.* 
FROM crm_device_history h 
     LEFT JOIN (SELECT Max([date]), 
         id 
        FROM crm_device_history_comments 
        GROUP BY id) c 
       ON c.crm_device_history_id = h.id 
WHERE device_id = 147 
     AND crm_history_states_id >= 0 
ORDER BY h.id DESC 
+0

ようこそスタックオーバーフロー!このコードスニペットをご利用いただきありがとうございます。適切な説明(* meta.stackexchange.com/q/114762)は、*なぜ*これが問題の良い解決策であるかを示すことで長期的な価値を向上させ、将来の読者にとって他の同様の質問。あなたの前提を含め、あなたの答えを[編集]して説明を加えてください。 –

+0

okこのコードスニペットは、フィールドリストの未知の列c.commentを返します。 – Rich

0

あなたの予想結果は何ですか?この1

SELECT 
     h.id, 
     sub_query.id AS comment_id, 
     c.comment as recent_comment, 
     h.* 
    FROM 
     crm_device_history h 
    INNER JOIN 
     (SELECT 
      max(id) as id, 
      crm_device_history_id 
     FROM 
      crm_device_history_comments 
     GROUP BY 
      crm_device_history_id) 
     AS sub_query ON sub_query.crm_device_history_id = h.id 
    INNER JOIN 
     crm_device_history_comments AS c ON c.id = sub_query.id 
    WHERE device_id = 147 AND h.crm_history_states_id >= 0 
    ORDER BY h.id DESC 
+0

ほとんどの場合、履歴レコードに返されるコメントは、履歴レコードに対する最新のコメントIDですが、recent_commentはまだ別のレコードからです。 – Rich

+0

エラーが発生しました。選択肢のrecent_commentの後にコンマを入れましたが、今は 'ON句のcrm_device_history_idが不明です' – Rich

+0

- #1054 - 'on clause'の 'crm_device_history.id'が不明です。もし私がh.idのためにそれを入れ替えるならば、私は記録を得ますが、歴史記録の最近のコメントではなく、4つしかありません。これはヘッドベンダーです! – Rich

関連する問題