Mon script devrait être en cours d'exécution, mais il peut ne pas être «efficace» et le problème principal est je suppose que cela prend trop de temps à courir quand je l'exécute au travail toute la session est annulée avant qu'elle ne finisse.Optimiser le script SQL: obtenir la valeur de plage d'une autre table
J'ai essentiellement 2 tables Tableau A - contient toutes les transactions une personne ne
Person's_ID Transaction TransactionDate
---------------------------------------
123 A 01/01/2017
345 B 04/06/2015
678 C 13/07/2015
123 F 28/10/2016
Tableau B - contient l'ID de la personne et GraduationDate
Ce que je veux faire est de vérifier si une personne est active . Active = s'il y a au moins une transaction effectuée par la personne 1 mois avant son GraduationDate
Le temps d'exécution est trop long imaginer parce que si j'ai des millions de personnes et chaque personne effectuer plusieurs transactions et ces transactions sont enregistrées en ligne par ligne dans le tableau A
SELECT
PERSON_ID
FROM
(SELECT PERSON_ID, TRANSACTIONDATE FROM TABLE_A) A
LEFT JOIN
(SELECT CIN, GRAD_DATE FROM TABLE_B) B
ON A.PERSON_ID = B.PERSON_ID
AND TRANSACTIONDATE <= GRAD_DATE
WHERE TRANSACTIONDATE BETWEEN GRAD_DATE - INTERVAL '30' DAY AND GRAD_DATE;
* Tableau A et B sont des produits de tables jointes par conséquent, ils sont subqueried.
Et à quoi devrait ressembler la sortie? –
Juste comme un FYI, votre clause where se traduira par une jointure interne. Si vous voulez vraiment une jointure externe, la clause where doit être déplacée vers la clause on. – Andrew
Salut @GordonLinoff, la sortie que je m'attends est une liste de PERSON_ID qui sont "actifs" - cela signifie avec des transactions dans les 30 jours de la GraduationDate respective de la personne – Joy