J'ai besoin d'interroger une table pour des enregistrements de dépôt en double, où deux dépôts effectués sur un même terminal, pour le même montant, dans une certaine fenêtre temporelle, sont considérés comme des enregistrements en double. J'ai commencé à travailler sur une requête maintenant, mais j'apprécierais tous les conseils ou suggestions pour le faire correctement.Recherche efficace pour trouver des enregistrements en double
1
A
Répondre
2
En général, vous feriez une auto se joindre à la même table, et de mettre votre « double » critères dans les conditions de jointure.
E.g.
SELECT
*
FROM
Transactions t1
inner join
Transactions t2
on
t1.Terminal = t2.Terminal and
t1.Amount = t2.Amount and
DATEDIFF(minute,t2.TransactionDate,t1.TransactionDate) between 0 and 10 and
t1.TransactionID > t2.TransactionID /* prevent matching the same row */
2
simple agrégat
SELECT
col1, col2, col3, ...
FROM
MyTable
GROUP BY
col1, col2, col3, ...
HAVING
COUNT(*) >= 2
Ne pas inclure votre identité/clé/colonne PK: ce sera unique par ligne et gâcher l'ensemble.
Pour obtenir une ligne pour supprimer ou conserver, faire un MAX ou MIN sur ce
SELECT
col1, col2, col3, ...,
MAX(IDCol) AS RowToDelete,
MIN(IDCol) AS RowToKeep
FROM
MyTable
GROUP BY
col1, col2, col3, ...
HAVING
COUNT(*) >= 2
Bien sûr, avec 3 doubles puis faire un « garder ».
Edit:
Pour les lignes dans une fenêtre de temps, utilisez une jointure réflexive ou fenêtre/classement fonction
Questions connexes
- 1. Trouver des enregistrements en double dans MySQL en utilisant LIKE
- 2. Requête SQL avec des enregistrements en double
- 3. la suppression des enregistrements en double
- 4. NHibernate Linq - Enregistrements en double
- 5. Trouver des fichiers PDF en double
- 6. Recherche d'applications iPhone en double
- 7. Algorithme efficace pour trouver des soumissions connexes
- 8. Trouver des enregistrements manquants
- 9. CTE récursif pour trouver des enregistrements parent
- 10. Duplication efficace des enregistrements dans tsql
- 11. trouver la répétition des numéros en double
- 12. php/mysql créer des enregistrements en double avec plusieurs tables
- 13. SQL - Besoin de trouver des enregistrements en double, mais EXCLUDE transactions inversées
- 14. MySQL - trouver des tuples en double
- 15. SQL trouver des enregistrements en double survenant à moins de 1 minute d'intervalle
- 16. Utiliser searchlogic dans Rails pour trouver des enregistrements par created_at
- 17. Recherche avancée des enregistrements MySQL
- 18. MySql UPDATE seulement un des enregistrements en double
- 19. Empêcher plusieurs processus d'enregistrement actifs d'insérer des enregistrements en double
- 20. Linq2SQL et les enregistrements en double
- 21. Trouver la plupart des enregistrements.
- 22. Supprimer des enregistrements en double dans une table
- 23. comparaison de fichiers avec des enregistrements en double dans cobol
- 24. Comment trouver des plages de dates dans des enregistrements avec des dates consécutives et des données en double
- 25. Retour efficace des enregistrements parent et enfant avec NHiberate
- 26. Filtrage/Recherche efficace
- 27. fonction efficace pour convertir float/double pour chaîne
- 28. Recherche en ligne efficace et remplacement pour le fichier volumineux
- 29. Créer des enregistrements en double sur SELECT pour la plage de dates du calendrier
- 30. Recherche efficace de NameValueCollection
Le vôtre est meilleur pour trouver des reproductions exactes. –
Merci, mais de regrouper sur la différence entre les temps de dépôt de deux enregistrements s'avérera difficile. @Damien_The_Unbeliever a une requête plus flexible. – ProfK