2016-05-18 8 views
0

私が望むデータを得るために左の結合を行いました。しかし、出力表には4つの列があり、最初の3つは正しいデータを持っていますが、最後の列は他の3と一致しません3.したがって、ある表では固有の名前を持ち、ユーザー名、および「コメント」が含まれます。それが難しいのは、毎日変更されているテーブルに最新の日付だけを入れる必要があるということです。これは私のクエリです:MySQLで間違った出力テーブルに参加しました

SELECT CONCAT(ur.USR_FIRSTNAME, ur.USR_LASTNAME) AS 'NAME', 
     aav.USR AS 'USERNAME', 
     IF(aav.TIME_STAMP > NOW() + INTERVAL -4 HOUR, 
     aav.AVAILABLE_DATE,MAX(aav.AVAILABLE_DATE)) AS 'DATE_AVAILABLE', 
     aav.COMMENTS AS 'COMMENTS' 
FROM wi_workflow.USERS ur LEFT JOIN fii_tables.available_log aav ON ur.USR_USERNAME = aav.USR and ur.USR_UID = aav.USR_UID 
LEFT JOIN fii_tables.available_log aav2 ON(aav.COMMENT = aav2.COMMENT) 
WHERE ur.USR_POSITION = 'EDE' 
AND ur.USR_STATUS = 'ACTIVE' 
AND aav.TIME_STAMP > NOW() + INTERVAL - 45 DAY 
GROUP BY 1; 

誰かが私に最後の列を他の2と一致させる方法についてのヒントを教えてくれますか?おかげさまで

+0

他の問題は、古い日付が私の出力テーブルに新たな1以上である場合、私は古い大きな日付を持っていないということです新しい日付。 – amform

+1

私はあなたの予想される出力とともにサンプルテーブルのデータをいくつか見せてください。 –

+0

コードに間違いがありません。コピーして貼り付けたときに「消えてしまったかもしれませんが、コードが実行されます。 – amform

答えて

0

私は、これは私が使用したクエリである私の問題を解決しました:

SELECT aev.ede_name, 
      aav.available_date, 
      aav.COMMENT AS 'COMMENT', 
      IF(aav.AVAILABLE_DATE < NOW() + INTERVAL 5 DAY, "AVAILABLE THIS WEEK",'NOT AVAILABLE') AS 'AVAILABILITY' 
    FROM fii_tables.available_log aav 
    INNER JOIN (SELECT aav.`USR` AS usr,max(aav.TIME_STAMP) AS `TIME_STAMP` from fii_tables.available_log aav group by aav.USR;) lts ON (lts.usr = aav.usr AND lts.time_stamp = aav.time_stamp) 
    LEFT JOIN wf_workflow.actual_ede_v aev ON(aav.usr = aev.usr_username) 
    where aev.ede_name is not null 
    GROUP BY aav.usr, aav.time_stamp; 
関連する問題