2016-07-27 9 views
1

latest_dateを3つの日付フィールドの間にあるデータベースから取得したいと考えています。 私は次のクエリを使用していますが、私の要件ではOKではありません。 3日付フィールドを比較する方法latest_dateを取得するには?私はあなたがすべての間での最新のをしたい場合はこの1つはあなたに単一の行Mysql 3つのdatetimeフィールドを比較する

のための最新の日付を与える必要がありますGREATEST()機能

GREATEST(cc.updated, af.created, e.updated) AS latest_date 

を使用することができると思う

SELECT DISTINCT e.id, MAX(cc.updated) AS clinicComment_date, MAX(af.created) AS attenderInfo_created, e.updated AS event_updated, 
(
CASE 
WHEN MAX(cc.updated) > MAX(af.created) 
THEN MAX(cc.updated) 
WHEN MAX(cc.updated) < MAX(af.created) 
THEN MAX(af.created) 
ELSE e.updated 
END 
) AS latest_date 
FROM Event e 
LEFT JOIN EventClinic ec ON e.id = ec.event_id 
LEFT JOIN ClinicComment cc ON ec.clinic_id = cc.clinic_id 
LEFT JOIN AttendersInfo af ON af.event_id = e.id 
WHERE e.status = 'active' 
AND (
e.id =43 
OR e.id =45 
) 
GROUP BY e.title 
ORDER BY latest_date DESC 

おかげ

答えて

1

行:

MAX(GREATEST(cc.updated, af.created, e.updated)) AS latest_date 
あなたは同じである必要があり COALESCE

GREATEST(
    COALESCE(MAX(cc.updated), 0), 
    COALESCE(MAX(af.created), 0), 
    COALESCE(MAX(e.updated), 0) 
) AS latest_date 

それとも

MAX(
    GREATEST(
     COALESCE(cc.updated), 0), 
     COALESCE(af.created), 0), 
     COALESCE(e.updated), 0) 
)) AS latest_date 

結果を使用できる値NULLに対処するために

GREATEST(MAX(cc.updated), MAX(af.created), MAX(e.updated)) AS latest_date 

を行うのと同じだ210

は、おそらく彼らはで異なりますパフォーマンス、わからない

+0

を試してみてください最大値

を返すようにGREATEST機能を提供し、私はこのクエリAS GREATEST (MAX(cc.updated)、MAX(af.created)、MAX(e.updated))を使用して実行します最新の日付 しかし、preoblemがあります。 1つの日付フィールドがNULLの場合、latest_dateはnullになります。 – kogyikyaw

+0

'NULL'値を持つ日付フィールドではどうすればいいですか? – kogyikyaw

+0

だからISNULLに対してすべての列をチェックし、NULL値を別の値に置き換える必要があります。私は答えを編集します – arilia

0

SQLにはGREATEST()というファンクションがあります。あなたはGREATEST(MAX(cc.updated), MAX(af.created)) AS latest_dateでライン

(
CASE 
WHEN MAX(cc.updated) > MAX(af.created) 
THEN MAX(cc.updated) 
WHEN MAX(cc.updated) < MAX(af.created) 
THEN MAX(af.created) 
ELSE e.updated 
END 
) AS latest_date 

を交換し、それに3番目のフィールドを追加することができます。

+0

はい、私はこのクエリで試してみます。GREATEST(MAX(cc.updated)、MAX(af.created)、MAX(e.updated))AS latest_date前幕。 1つの日付フィールドが「NULL」であるとき、latest_dateは「NULL」である。 'NULL'値を持つ日付フィールドではどうしたらいいですか? 。 – kogyikyaw

0

すべての条件が満たされていないケースステートメントで問題が確認できます。 MySQLはこの

select DISTINCT e.id,GREATEST(MAX(cc.updated),MAX(af.created),e.updated) as Latest_Date 
FROM Event e 
LEFT JOIN EventClinic ec ON e.id = ec.event_id 
LEFT JOIN ClinicComment cc ON ec.clinic_id = cc.clinic_id 
LEFT JOIN AttendersInfo af ON af.event_id = e.id 
WHERE e.status = 'active' 
AND (e.id =43 OR e.id =45) 
GROUP BY e.title 
ORDER BY latest_date DESC 
関連する問題