J'essaie de trouver une requête qui me donnera le nombre de clients qui ont traité avec 2 entités différentes dans le même mois. En d'autres termes, customer_ids qui a effectué des transactions avec company_a et company_b au cours du même mois. Voici ce que j'ai jusqu'à présent:Requête SQL pour le chevauchement d'ID de groupe (via la jointure interne) par mois
SELECT Extract(year FROM company_a_customers.transaction_date)
|| Extract(month FROM company_a_customers.transaction_date) AS
payment_month,
Count(UNIQUE(company_a_customers.customer_id))
FROM (SELECT *
FROM my_table
WHERE (merchant_name LIKE '%company_a%')) AS company_a_customers
INNER JOIN (SELECT *
FROM my_table
WHERE (merchant_name = 'company_b')) AS
company_b_customers
ON company_a_customers.customer_id =
company_b_customers.customer_id
GROUP BY Extract(year FROM company_a_customers.transaction_date)
|| Extract(month FROM company_a_customers.transaction_date)
Le problème est que cela me donne un total cumulé de tous les clients qui transigent avec la société A sur une base mensuelle par mois qui a également jamais traitées avec la société B.
Si je Whittle vers le bas pour un mois spécifique, il me donnera évidemment le chevauchement correct, parce que la requête ne reçoit que des ID pour ce mois:
SELECT Extract(year FROM company_a_customers.transaction_date)
|| Extract(month FROM company_a_customers.transaction_date) AS
payment_month,
Count(UNIQUE(company_a_customers.customer_id))
FROM (SELECT *
FROM my_table
WHERE (merchant_name LIKE '%company_a%')
AND transaction_date >= '2017-06-01'
AND transaction_date <= '2017-06-30') AS company_a_customers
INNER JOIN (SELECT *
FROM my_table
WHERE (merchant_name = 'company_b')
AND transaction_date >= '2017-06-01'
AND transaction_date <= '2017-06-30') AS
company_b_customers
ON company_a_customers.customer_id =
company_b_customers.customer_id
GROUP BY Extract(year FROM company_a_customers.transaction_date)
|| Extract(month FROM company_a_customers.transaction_date)
Comment puis-je faire cela dans un requête pour obtenir mensuelle totaux pour les clients qui ont effectué des transactions avec les deux sociétés au cours du mois donné?
Résultat souhaité: Sortie de la deuxième requête, mais pour chaque mois de la base de données. En d'autres termes:
Janvier 2017 xx, xxx clients se chevauchent Février 2017 xx, xxx clients se chevauchent Mars 2017 xx, xxx clients se chevauchent
de Merci beaucoup.
Modifier votre question. (1) Marquer avec la base de données que vous utilisez. (2) Fournir des exemples de données. (3) Fournir les résultats souhaités. –
J'ai fait les modifications suggérées –