На поверхности это кажется разрешимым с парой Распространенные табличные выражения
Помогает ли это направить вас в правильном направлении?
WITH s1 -- JJAUSSI: Find the visit_number_count by member_key and store_key
AS
(SELECT isf.member_key
,isf.store_key
-- JJAUSSI: DISTINCT resolves a potential 1:N (one to many) relationship here
,COUNT( DISTINCT isf.visit_number) AS visit_number_count
FROM item_scan_fact isf
GROUP BY isf.member_key
,isf.store_key),
s2 -- JJAUSSI: Find the visit_number_count_max by member_key
AS
(SELECT s1.member_key
,MAX(s1.visit_number_count) AS visit_number_count_max
FROM s1
GROUP BY s1.member_key)
-- JJAUSSI: Use this version to see the list of store_key values
-- that have the visit_number_count_max value. This has the potential
-- to be a 1:N relationship.
SELECT s1.member_key
,md.member_number
,s1.store_key
,sd.store_number
,s1.visit_number_count
FROM s2 INNER JOIN s1
ON s2.member_key = s1.member_key
AND s2.visit_number_count_max = s1.visit_number_count
INNER JOIN store_dimension sd
ON sd.store_key = s1.store_key
INNER JOIN member_dimension md
ON md.member_key = s1.member_key;
Если это то, чтоты собирался за ... поздравления!Перейдем к следующему запросу!
Если вы в конечном итоге после одного store_key ответа для каждого member_key (в основном вы хотите определить «основной» store_key для member_key), то, возможно, потребуется дополнительный шаг(в зависимости от ваших данных).
Вот несколько идей:
- Оцените значение member_key на основе некоторого другого суммируемого аспекта item_scan_fact (например, общая заплаченная цена?)
- Если вы учитываете все значения store_keyс равными достоинствами, которые имеют одинаковое значение visit_number_count_max для данного ключа member_, просто выберите store_key с MAX или MIN