Как узнать, сколько раз в первый раз встречается уникальный идентификатор в определенный день? - PullRequest
1 голос
/ 23 сентября 2019

Итак, у меня есть две таблицы:

customer_dimension:

sk_customer | first_name | last_name | acq_channel | acq_date |  customer_id
-----------------------------------------------------------------------------
411           Alex          Hum       Offline        2019-03-02  44586344
422           Eric          Spong     Offline        2019-02-02  44323233
447           Eddie         Peng      TV             2019-05-07  44782233

boxes_shipped:

box_id | fk_box_sku | fk_customer | fk_geography | week |  delivery_date
----------------------------------------------------------------------------
123      321          447           Syd            2       2019-04-02      
124      322          422           WA             3       2019-02-05
125      323          411           WA             4       2019-05-07

fk_customer ссылается на sk_customer через ограничение внешнего ключа.

Я хотел бы найти способ подсчета числа случаев, когда ПЕРВОЕ вхождение fk_customer во вторник, то есть количество людей, которые получают свою первую коробку во вторник.Таким образом, если бы клиент заказал 2-ю коробку во вторник, это не увеличило бы количество.

Как мне написать запрос, чтобы узнать, является ли дата доставки вторником?А затем считать только первое вхождение fk_customer?

Ответы [ 3 ]

1 голос
/ 23 сентября 2019

Ссылка на ваши требования,

  • Для подсчета заказов fk_customer за каждую отдельную дату вы можете использовать group by delivery_date, fk_customer и использовать count(*) агрегатор для этого.

  • Чтобы получить конкретное название дня от даты, вы можете найти библиотечную функцию для конкретной СУБД.

MySQL-реализация вашего требуемого запроса будет:

select count(*) repeatedOrders, fk_customer, delivery_date from boxes_shipped group by delivery_date, fk_customer where dayname(delivery_date) = 'Tuesday'.
0 голосов
/ 25 сентября 2019

Если кому-то интересно, я использовал:

with order_values as(
     select *, rank() over(partition by delivery_date,fk_customer)
as order_value_rank
from boxes_shipped
where DATE_FORMAT(delivery_date, '%a') = 'Tues'
)

select count(*) as 'Number of people that received their 1st box on Tues'
from order_values
where order_value_rank =1;
0 голосов
/ 23 сентября 2019

Я бы рекомендовал два уровня агрегации:

select count(*)
from (select fk_customer, min(delivery_date) as first_delivery_date
      from boxes_shipped
      group by fk_customer
     ) c
where dayname(first_delivery_date) = 'Tuesday';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...