0
votes

Comment augmenter les performances de la requête ci-dessous sans utiliser de mots-clés distincts

J'ai 2 table pour enregistrer des données. Par exemple, vous vous êtes connecté, vos informations sont enregistrées dans le tableau1. Lorsque vous vous êtes connecté à la deuxième fois, vos informations sont enregistrées dans le tableau 1 et vos informations d'ouverture précédentes se situent dans Tableau2. Les tables ont trop de lignes. Pour conclure, je souhaite obtenir le nombre d'utilisateurs différents se sont connectés avec l'adresse IP donnée pour les 60 derniers jours. IP est l'entrée pour la déclaration SQL. Cependant, j'ai un problème de performance dans ma requête SQL. (deux table ont la même structure et veuillez ignorer l'indexation de vos suggestions) em> est également le moyen d'obtenir TOTCOUNT en utilisant sans distinct et un autre mot clé de sélection. Merci

​​Voici mon SQL: P>

 select distinct count(*) over() as totCount 
 into p_differentCustomerCount
 from (
      select t1.customerNo,t1.customerIp,t1.lastlogindate from table1 t1
      union all 
      select t2.customerNo,t2.customerIp,t2.lastlogindate from table2 t2
      )t
 where t.lastlogindate > sysdate - 60 
       and t.customerIp= "IP_As_Input"
 group by customerNo;


2 commentaires

Supprimer le Union tout . Ça ne fait rien. Votre description mentionne deux tables, mais votre requête ne fait que références une.


Voulez-vous Le nombre d'utilisateurs différents se sont connectés avec la même adresse IP pour chaque IP? Ou est-ce juste le nombre total? Clarifier ce que vous voulez.


3 Réponses :


0
votes

Je veux obtenir le nombre d'utilisateurs différents se sont connectés avec la même adresse IP depuis 60 jours.

Vous semblez vouloir: xxx

Je ne sais pas pourquoi vous avez un filtre sur la propriété intellectuelle. Il n'est pas mentionné dans le texte.


1 commentaires

IP est transmis comme entrée sur la requête SQL. Je dois donc l'utiliser.



0
votes

Vous devez connaître le numéro d'utilisateurs distincts qui se sont connectés avec la même adresse IP. Donc, ma suggestion serait d'utiliser directement où la clause . Pas sur la vue intérieure.

quelque chose comme ceci: xxx

acclamations !!


0 commentaires

0
votes

Je veux obtenir le nombre d'utilisateurs différents se sont connectés avec la même adresse IP depuis 60 jours. P>

Il apparaît que vous souhaitez utiliser compter (Customerno distinct) code>, pas Nombre distinct (*) code>: p>

SELECT SUM(RN) AS CUSTOMER_COUNT
  FROM (SELECT ROW_NUMBER() OVER (PARTITION BY z.CUSTOMER_NO) AS RN
          FROM (SELECT * FROM TABLE1
                UNION ALL
                SELECT * FROM TABLE2) z
          WHERE z.CUSTOMERIP = 'wh.at.ev.ah' AND
                z.LASTLOGINDATE > SYSDATE - INTERVAL '60' DAY
          HAVING RN = 1)


1 commentaires

Jarvis - réintégrer, oui c'est vrai mais je dois le résoudre par 3 Sélectionner une déclaration