J'ai une table avec les numéros de téléphone et plusieurs paquets auxquels ils appartiennent. Certains numéros appartiennent à un seul paquet et d'autres à plusieurs paquets. Les paquets sont triés par ordre croissant.
J'ai besoin d'une nouvelle table avec les nombres et seulement le premier paquet (le plus ancien).
Si j'utilise ceci:
SELECT DISTINCT Cli_Inyectados.Telefono, Cli_Inyectados.Paquete INTO New_Table FROM Cli_Inyectados;
J'obtiendrai le même tableau car il n'y a pas d'enregistrements en double.
Si j'utilise GROUP BY
ou DISTINCTROW
j'obtiens le même résultat.
3 Réponses :
Utilisez une sous-requête corrélée. En supposant que vous ayez une colonne d'horodatage d'une sorte - qui est arbitrairement appelée created_at
dans la requête ci-dessous:
SELECT i.Telefono, i.Paquete INTO New_Table FROM Cli_Inyectados as i WHERE i.created_at = (SELECT MIN(i2.created_at) FROM Cli_Inyectados as i2 WHERE i2.Telefono = i.Telefono );
@yogurblanco. . . Bien sûr. Sinon, je n'aurais pas fourni la réponse.
Je pense comprendre ce que vous avez dit mais en fait je n'ai pas plus de champs que Telefono (numéro) et Paquete (texte court). J'ai donc essayé avec ce code après avoir vérifié que MIN pour le champ Paquete renvoie la valeur la plus basse.
SELECT i.Telefono, i.Paquete INTO New_Table FROM Cli_Inyectados as i WHERE i.Paquete = (SELECT MIN(i2.Paquete) FROM Cli_Inyectados as i2 WHERE i2.Telefono = i.Telefono );
Mais cela prend beaucoup de temps donc je pense que je fais mal.
La table Cli_Inyectados actuelle contient plus de 17 000 enregistrements mais seulement 3 020 numéros de téléphone différents, donc ma New_table doit contenir 3 020 enregistrements.
Évitez la sous-requête corrélée si vous ne calculez pas les agrégations en cours. Au lieu de cela, envisagez de vous joindre à une sous-requête agrégée:
SELECT i.Telefono, i.Paquete INTO New_Table FROM Cli_Inyectados i INNER JOIN (SELECT Telefono , MIN(Paquete) AS min_Paquete FROM Cli_Inyectados GROUP BY Telefono ) agg ON i.Telefono = agg.Telefono AND i.Paquete = agg.min_Paquete
Veuillez fournir des exemples de données et les résultats souhaités. Comment savoir quelle ligne est la plus ancienne?
Les numéros de paquet sont composés d'un nombre croissant à deux chiffres, de l'année et du numéro de la semaine. Exemple: Telefono 134583020 Paquete 39-20.w01 Les numéros de téléphone sont stockés plusieurs fois, de même que les paquets, mais pas la même combinaison.