0
votes

Liste des individus où la somme sur une période de temps est égale à zéro

J'essaie de retourner une liste des (numéros d'identification de marchands) qui ont un nombre total de transactions de zéro au cours des six derniers mois (dans le contexte, la liste médiane où transactions = 0 au cours des six derniers mois) mais ont Ouvert il y a plus de 6 mois.

Avec ma requête actuelle, je constate que certaines de ces personnes ont zéro transaction dans le dernier mois, mais leur total au cours des 6 derniers mois est supérieur à zéro. p>

Je pense que le problème peut être trouvé quelque part autour de la déclaration où, mais je ne sais pas comment corriger cela. P>

SELECT MERCHANTS.MID, MERCHANTS.DBA_NAME, MERCHANTS.OPEN_DATE, SUM(TRANSACTIONS) as 'Transactions Last 6 Months'

  FROM [RESIDUAL_STAGE].[dbo].[BI_DATA_MAP_201906]
  INNER JOIN MERCHANTS ON BI_DATA_MAP_201906.MID = MERCHANTS.MID
  INNER JOIN LK_BI_LEAD_SOURCE ON MERCHANTS.BI_LEAD_SOURCE = LK_BI_LEAD_SOURCE.LBLS_ROW_ID
  INNER JOIN LK_BI_PORTFOLIO ON MERCHANTS.BI_PORTFOLIO = LK_BI_PORTFOLIO.LBPORT_ROW_ID
  INNER JOIN LK_BI_PROCESSOR ON MERCHANTS.BI_PROCESSOR = LK_BI_PROCESSOR.LBP_ROW_ID
  INNER JOIN LK_BI_SALES_AGENT ON MERCHANTS.BI_SALES_AGENT = LK_BI_SALES_AGENT.LBSA_ROW_ID
  INNER JOIN LK_BI_SALES_CHANNEL ON MERCHANTS.BI_SALES_CHANNEL = LK_BI_SALES_CHANNEL.LBSC_ROW_ID

  WHERE LK_BI_SALES_CHANNEL.LK_BI_SALES_CHANNEL_DESC = 'Beacon'
  AND
  datediff(month, RESIDUAL_PERIOD, getdate()) <= 6
  AND
  TRANSACTIONS = 0
  AND
  datediff(month, MERCHANTS.OPEN_DATE, getdate()) > 6

  GROUP BY MERCHANTS.MID, MERCHANTS.DBA_NAME, MERCHANTS.OPEN_DATE

  ORDER BY MERCHANTS.DBA_NAME asc
  • marchands.mid = Numéros d'identification de marchands = individus li>
  • marchands.open_date = date de la mi-ouverture li>
  • résidule_period = date / période de transactions = mesure temporelle que je veux que les 6 mois de transactions soient égaux à 0 li> ul> p>

sql

2 commentaires

Votre question est totalement incertaine. Eh bien, la question a du sens. Que doit faire la requête avec quoi que ce soit? Vous posez des questions sur les individus. Il n'y a pas d'individus dans la requête. Vous posez des questions sur une seule «date de transaction». Je ne vois aucune des transactions ni une date claire dans la requête. Aussi tag avec une base de données.


Je m'excuse; Je vais ajouter du contexte à la question.


3 Réponses :


0
votes

J'essaie de retourner une liste d'individus qui ont un nombre total de transactions de zéro au cours des six derniers mois (dans le contexte, la liste médiane où transactions = 0 au cours des six derniers mois).

Je vais ignorer votre requête.

L'idée de base est la suivante: xxx

Ceci utilise la syntaxe standard SQL. Les fonctions de date sont susceptibles d'être différentes sur votre base de données.


0 commentaires

1
votes

Je pense que vous voulez que la somme des transactions soit zéro? Voir si cela fonctionne:

SELECT MERCHANTS.MID, MERCHANTS.DBA_NAME, MERCHANTS.OPEN_DATE,
   SUM(TRANSACTIONS) as Transactions_Last_6_Months
FROM [RESIDUAL_STAGE].[dbo].[BI_DATA_MAP_201906]
INNER JOIN MERCHANTS ON BI_DATA_MAP_201906.MID = MERCHANTS.MID
INNER JOIN LK_BI_LEAD_SOURCE ON MERCHANTS.BI_LEAD_SOURCE = LK_BI_LEAD_SOURCE.LBLS_ROW_ID
INNER JOIN LK_BI_PORTFOLIO ON MERCHANTS.BI_PORTFOLIO = LK_BI_PORTFOLIO.LBPORT_ROW_ID
INNER JOIN LK_BI_PROCESSOR ON MERCHANTS.BI_PROCESSOR = LK_BI_PROCESSOR.LBP_ROW_ID
INNER JOIN LK_BI_SALES_AGENT ON MERCHANTS.BI_SALES_AGENT = LK_BI_SALES_AGENT.LBSA_ROW_ID
INNER JOIN LK_BI_SALES_CHANNEL ON MERCHANTS.BI_SALES_CHANNEL = LK_BI_SALES_CHANNEL.LBSC_ROW_ID
WHERE LK_BI_SALES_CHANNEL.LK_BI_SALES_CHANNEL_DESC = 'Beacon'
   AND datediff(month, RESIDUAL_PERIOD, getdate()) <= 6
   AND datediff(month, MERCHANTS.OPEN_DATE, getdate()) > 6
GROUP BY MERCHANTS.MID, MERCHANTS.DBA_NAME, MERCHANTS.OPEN_DATE
HAVING SUM(TRANSACTIONS) = 0
ORDER BY MERCHANTS.DBA_NAME asc


0 commentaires

0
votes

Pour les conditions des agrégations (somme, avg, etc.), vous devez utiliser avoir au lieu de où mot-clé. Donc, supprimez-le de votre où condition: xxx

et remplacez-le par (après votre condition d'utilisation): xxx < / p>


1 commentaires

Merci à tous pour les réponses. C'était particulièrement utile en raison des informations sur l'avoir et où les mots-clés.