2017-09-17 8 views
-6
  1. 従業員の複数の勤務記録のテーブルがあり、特定の日付範囲をクエリしたいところです。
  2. パラメータ
  3. ..従業員は、最新の雇用レコードを取得する必要がありますその結果、複数の雇用のレコードを持っている場合
  4. 結果は一つだけである必要があり、指定された日付とemployee.idの範囲にあることが必要Company.id、date_hired、DATE_ENDあります

これは私が現在行っていることです。私のためにSQLクエリを簡略化してください

SELECT * 
    FROM employmentrecords 
WHERE employmentrecords.id IN(
    SELECT MAX(employmentrecords.id) 
     FROM employmentrecords 
    WHERE ((employmentrecords.date_end >='2017-08-22' 
     OR employmentrecords.date_end IS NULL 
     OR (employmentrecords.date_end <='2017-08-22' 
     AND employmentrecords.date_end >='2017-08-08')) 
     AND employmentrecords.date_hired <='2017-08-22') 
    GROUP 
     BY employmentrecords.employee_id) 
     AND employmentrecords.company_id<>0` 

Hope any one would suggest a better approach.Thank you 
+1

今、何が問題になっていますか? –

+0

これは 'java'と何が関係していますか? –

+1

https://codereview.stackexchange.com – Reimeus

答えて

1

私はすべてが明らかにあなたの質問を得た場合、複数のユーザレコードがある場合は、以下のこのクエリはあなたに最新の従業員レコードを与えることを確認していない -

SELECT * FROM employmentrecords WHERE id IN(SELECT MAX(id) FROM employmentrecords 
    WHERE ((date_end >='2017-08-22' 
      OR date_end IS NULL 
      OR (date_end <='2017-08-22' AND date_end >='2017-08-08')) 
      AND date_hired <='2017-08-22') 
    GROUP BY employee_id) 
    AND company_id<>0 
    and rownum = 1 
    order by date_hired desc 

JFYI、使用する必要はありませんデータをフェッチしているテーブルが1つしかない場合は、エイリアスとしてテーブル名を使用すると、goでクエリを読みにくくなります。

1
SELECT id, max(date_hired) 
     FROM employmentrecords 
    WHERE ((employmentrecords.date_end >='2017-08-22' 
     OR employmentrecords.date_end IS NULL 
     OR (employmentrecords.date_end <='2017-08-22' 
     AND employmentrecords.date_end >='2017-08-08')) 
     AND employmentrecords.date_hired <='2017-08-22') group by id 
関連する問題