хотите получить общий доход за последние 30 дней с максимальной даты и возраста клиентов от 25 до 30, рассчитанных по DOB - PullRequest
0 голосов
/ 06 января 2020

Для всех клиентов в возрасте от 25 до 35 лет узнать, каков net общий доход, полученный этими потребителями за последние 30 дней транзакций с максимальной даты транзакции, доступной в данных?

Пробовал много вещей, но не в состоянии решить эту проблему

Мой код

SELECT
SUM(total_amt) [NET TOTAL REVENUE]
FROM Transactions 
                  INNER JOIN Customer ON Transactions.cust_id = Customer.customer_Id
WHERE tran_date >= DATEADD(day,-30,MAX(tran_date)) and DATEDIFF(YEAR,DOB,tran_date) between 25 and 30

1 Ответ

0 голосов
/ 06 января 2020

Я бы порекомендовал оконным функциям получить максимальную дату:

SELECT SUM(t.total_amt) as net_total_revenue
FROM (SELECT t.*,
             MAX(t.tran_date) OVER () as max_tran_date
      FROM Transactions t
     ) t JOIN
     Customer c
     ON t.cust_id = c.customer_Id
WHERE t.tran_date >= DATEADD(day, -30, t.max_tran_date) AND 
      t.tran_date >= DATEADD(YEAR, 25, c.DOB) AND
      t.tran_date < DATEADD(YEAR, 31, c.DOB);

Некоторые примечания:

  • Квалифицировать все имена столбцов, чтобы было ясно, где они приходят.
  • DATEDIFF() не делает то, что вы думаете, что делает. Он считает число 1 января между двумя датами. DATEADD() точнее.
  • Не называйте псевдонимы столбцов пробелами. Используйте имена, которые не нужно экранировать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...