0
SELECT users.email FROM users
INNER JOIN orders
ON orders.user_id = users.id
WHERE orders.status = 'new'
AND orders.date_created > three months back?

今日から 3 か月以内にサイトで注文していないすべてのユーザーのメールを取得したいと考えています。したがって、3 か月以内に注文がない場合は、メールを取得してください。

date_createdタイプは TIMESTAMP です。例: 2012-11-10 23:54:20

また、注文をまったく行っていない (注文テーブルに行がない) ユーザーのメールを取得するためのクエリが必要ですか?

私は試しました:

SELECT users.email FROM users
    WHERE users.id NOT IN (select user_id from orders where user_id = users.id and orders.status = 'new')

しかし、とにかく注文でユーザーをつかむようですか?

4

1 に答える 1

1
  1. 今日から 3 か月以内にサイトで注文していないすべてのユーザーのメールを取得したいと考えています。

    ユーザーごとに注文をグループ化し、最新の注文が 3 か月以上前のものの結果をフィルター処理します。

    SELECT   users.email
    FROM     users JOIN orders ON orders.user_id = users.id
    GROUP BY orders.user_id
    HAVING   MAX(orders.date_created) < CURRENT_DATE - INTERVAL 3 MONTH;
    
  2. また、注文をまったく行っていない (注文テーブルに行がない) ユーザーのメールを取得するためのクエリが必要ですか?

    外部結合を作成し、交差の外側にあるレコードをフィルター処理します。

    SELECT   users.email
    FROM     users LEFT JOIN orders ON orders.user_id = users.id
    WHERE    orders.user_id IS NULL
    
于 2012-11-10T23:24:43.530 に答える