2012-04-24 12 views
0

は私が知っている必要がありフライ、上で参加の条件に参加私はMAXを(選択したい、それぞれ異なるduedate状況にある顧客を持っていますLEFT ON)最新の期日のは、それは私が欲しいものではありません最古duedateを選択二つのテーブル..MySQLは例えば</p> <p>、私はその場でこれを行うのですか

SELECT c.customerid, i.datedue 
         FROM customers c 
           LEFT JOIN invoice i 
           ON i.customerid = c.customerid 
         WHERE i.datedue <= UNIX_TIMESTAMP() 
           AND c.status!='d' 
         GROUP BY i.customerid 
         ORDER BY i.datedue DESC 
         LIMIT 0, 1000 
+0

お客様のリスト(ID別)を作成しようとしているかのように見えます。あれは正しいですか? –

+0

32ビットのUNIXタイムスタンプは68年のタイムスパンしかないため、タイムスタンプがネイティブSQLにあるときに他の日付関数をより高速に実行できるため、期日をタイプdatetimeまたはdateとして保存する必要があります。例えば、上記を 'WHERE i.datedue <= NOW()' – Anthony

答えて

2

に参加するときは、MAX()関数を使用する必要があり、現在、JOIN:

SELECT c.customerid, MAX(i.datedue) 
FROM customers c LEFT JOIN invoice i ON i.customerid = c.customerid 
WHERE i.datedue <= UNIX_TIMESTAMP() and c.status!='d' 
GROUP BY i.customerid 
ORDER BY i.datedue DESC 
LIMIT 0,1000 

これはあなたに彼は各顧客のための最大日付。

+0

+1に変更すると、単純なままにして、しばしば忘れられた 'GROUP BY' – Anthony

関連する問題

 関連する問題