2017-09-14 7 views
1

私はdistinctの1つのデータを取得したいと考えています。MAXデータを取得する方法Max ID

私のコードは以下の通りです:

SELECT DISTINCT Email, 
       Degree, 
       Majority 
FROM job_education a 
WHERE a.Status = 'Active' 
AND a.IdEducationLevel = (
          SELECT Max(b.IdEducationLevel) 
          FROM job_education b 
          WHERE b.Status='Active' 
          AND a.Email = b.Email 
         ) 

おかげで、あなたの優しさ、あなたが参加
を使用する必要があります

+2

いくつかのサンプルデータを提供でき、期待される出力が得られるなら、それは素晴らしいことでしょう – Hatik

+0

あなたは私を「wanna」に迷わせました。 – Strawberry

+3

あなたのコードの問題点は何ですか? –

答えて

1

コードは問題ありませんが、テーブルエイリアスを修正します:

SELECT je.* 
FROM job_education je 
WHERE je.Status = 'Active' AND 
     je.IdEducationLevel = (SELECT MAX(je2.IdEducationLevel) 
          FROM job_education je2 
          WHERE je2.Status = 'Active' AND je2.Email = je.Email 
          ); 

あなたが指定したメールに対して複数の行を取得している場合 - あなたは1行だけ欲しい - その後、サブクエリで優れたIDを使用します。

SELECT je.* 
FROM job_education je 
WHERE je.Status = 'Active' AND 
     je.job_education_id = (SELECT je2.job_education_id 
          FROM job_education je2 
          WHERE je2.Status = 'Active' AND je2.Email = je.Email 
          ORDER BY IdEducationLevel DESC, job_education_id DESC 
          LIMIT 1 
          ); 

私はこのためjob_education_idと呼ばれるIDを発明しました目的。このクエリでは、集計関数ではなくORDER BYLIMITが使用されます。

1

前に(副選択は、表Aに上位基準を参照することはできません)

SELECT DISTINCT Email, 
      Degree, 
      Majority 
    FROM job_education a 
    INNER JOIN (
     SELECT b.Email, Max(b.IdEducationLevel) max_IdEducationLevel 
     FROM job_education b 
     WHERE b.Status='Active' 
     GROUP BY b.Email 

    ) t ON a.Email = t.Email and a.IdEducationLevel = t.maxy_IdEducationLevel 
    WHERE a.Status = 'Active' 
関連する問題