2017-02-10 6 views
0

今後の活動によって自分のデータのソートを希望するクライアントのCMSを作成しています。SQLテーブルからのデータを別のテーブルのデータに依存する

customersという名前の表があり、すべての顧客が含まれており、cust_id列で識別されます。

activitiesという名前のテーブルもあります。そこには顧客とペアリングするためのcust_id列と、タスクが完了した時刻を指定するdate_last_doneフィールドがあります。顧客は自分のレコードに対して多くの活動を行うことができます。

最新の(date_last_done desc)アクティビティが11か月以上前に完了したすべての顧客を取得したいと考えています。

は、ここに私の試みです:

SELECT 
    * 
FROM 
    customers 
INNER JOIN 
    activities 
ON 
    activities.cust_id = customers.cust_id 
WHERE 
    (SELECT 
     date_last_done 
    FROM 
     activities 
    WHERE 
     cust_id = ??? 
    ORDER BY 
     date_last_done 
    DESC) 
    < date() - 11months 

どのように私はこれを行うには、私のクエリを編集しますか?

答えて

1

条件に一致するアクティビティを持つ顧客を返すサブクエリを使用してcustomersテーブルを結合します。

SELECT c.* 
FROM customers AS c 
JOIN (SELECT cust_id 
     FROM activities 
     GROUP BY cust_id 
     HAVING MAX(date_last_done) < DATE_SUB(NOW(), INTERVAL 11 MONTH)) AS a 
ON c.cust_id = a.cust_id 
+0

私はこのロジックを使用していません。 'AS a ON c.cust_id'の直前に括弧がないという問題があります。また、 'FUNCTION db.MAX()'が存在しないと宣言するとエラーが発生しますか? –

+0

ブラケットが不足していたのを修正しましたが、エラーについてはわかりません。 'MAX'の後ろに空白がないことを確認してください。 – Barmar

+0

Spot on。 PHPMyAdminはSQLをフォーマットし、そこに新しい行を追加しました。どうもありがとう! –

関連する問題