2010-11-19 9 views
2

それぞれの車のための最新のエントリを取得するSQLタイプ(INT)は私のデータベース(MySQLは)2つのテーブル</p> <p>表1を持っている、選択

表2は - 私はすべてのために私の最も最近の仕事を取得するSELECTコマンドを必要とし、各車

ジョブ= ID(整数)、日(日)

のジョブが含まれていますIDの

ありがとうございます。

+0

それはデータベース全体ですか?それとも、私たちのために単純化していますか?あなたが仕事を持っていれば、車も...どうにかして関連付ける必要があります... – WernerCD

答えて

4

、あなたがこれを行うカント試すことができます。各ジョブに関連するcar_idを格納するか、またはjobs_to_carsテーブルを持つ必要があります。

次にあなたが使用したい:これは私は、ジョブのIDは、その後j.idするj.car_idを変更車のIDと同じである場合

SELECT C.*, J.id, MAX(J.date) 
FROM cars C 
INNER JOIN jobs J on J.car_id = C.id 
GROUP BY C.id 

を、しかし、あなたがジョブズに主キーを欠いていることだろうあなたが作ることを提案する。あなたは仕事が

  • もっとエレガントな方法
  • に属する車指定 jobs.car_idフィールドを、忘れてしまった

    +0

    これはうまくいきません。 – zerkms

    +0

    MySQLエラー1111:グループ機能の無効な使用 –

    +0

    maxまたはjoinでの問題?私はなぜ結合がうまくいかないのか説明しました。そして、私は最大をテストする時間がありません。そこに2番目のクエリが必要な場合は、またはmaxを選択してから使用します。 –

    0

    あなたは、あなたが共有フィールドを持っていない

    ORDER BY date DESC 
    
    1
    SELECT * 
         FROM cars c 
    INNER JOIN (SELECT MAX(id) AS j_id 
           FROM jobs 
          GROUP BY car_id) x ON x.j_id = c.id 
    
    1. はフィールドcar.last_job_idを作成し、jobsテーブル上のトリガとそれを維持することになります。

    あなたの質問が明確ではないので、このクエリも答えになります

    SELECT j.* 
         FROM jobs j 
    INNER JOIN (SELECT MAX(id) id 
           FROM jobs 
          GROUP BY car_id) x ON x.id = j.id 
    
    +0

    あなたは彼がjobs.car_idを忘れてしまったと思って良かったのです...リンクするフィールドがないと仮定しました...どちらも危険な仮定です。私はフィールドを追加するとエレガントだとは思わないと思います... – WernerCD

    2

    あなたが他のフィールドを持っていないため、この

    SELECT c.*, MAX(j.date) date 
    FROM cars c 
        LEFT JOIN jobs j ON j.id = c.id 
    GROUP BY c.id 
    ORDER BY c.id 
    

    のようなものを使用することができます[jobs]。車に仕事がない場合、日付はNULLになります。

    関連する問題