SQL для количества клиентов, разместивших заказы в течение 6 месяцев - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть две таблицы:

  • клиенты: id, joining_date
  • заказов: id, customer_id, order_date

Мне нужно выбрать количество клиентов, которые разместили заказы в течение 6 месяцев с даты присоединения.
Что я сделал до сих пор:

SELECT COUNT(*)  
  FROM customers
  JOIN orders
    ON customers.id = orders.customer_id
    AND (
      orders.order_date BETWEEN customers.joining_date
      AND DateAdd(month,1,customers.joining_date)
    ) 

Но я получаю

Error: column 'month' does not exist

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Используйте этот запрос, который использует синтаксическое выражение PostgreSQL:

ВЫБЕРИТЕ СЧЕТЧИК (*) ОТ ПОКУПАТЕЛЕЙ ПРИСОЕДИНЯЙТЕСЬ К ЗАКАЗАМ customer.id = orders.customer_id AND (orders.order_date МЕЖДУ Customers.joining_date AND (Customers.joining_date + INTERVAL '1 месяц '));

0 голосов
/ 27 апреля 2018

Ваша логика (попытки) подсчитывает количество заказов , а не количество клиентов . Вот два подхода:

SELECT COUNT(DISTINCT c.id)  
FROM customers c JOIN
     orders o
     ON c.id = o.customer_id AND
        o.order_date >= c.joining_date AND
        o.order_date < c.joining_date + interval '6 month';

Или более эффективно, как:

SELECT COUNT(*)  
FROM customers c 
WHERE EXISTS (SELECT 1
              FROM orders o
              WHERE c.id = o.customer_id AND
                    o.order_date >= c.joining_date AND
                    o.order_date < c.joining_date + interval '6 month'
             );
0 голосов
/ 27 апреля 2018

Вы используете синтаксис SQL Server
В PostgreSQL вы добавляете интервал с date + interval '1 month'
Так что в вашем случае вы должны заменить DateAdd на:

customers.joining_date + interval '6 month'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...