la suppression de doublons ligne avec pas d'identificateur unique
J'ai des données dans une table qui ressemble à peu près comme suit:
table stockData
(
tickId int not null,
timestamp datetime not null,
price decimal(18,5) not null
)
Ni tickId ni d'horodatage sont uniques, cependant, la combinaison de tickId et timestamp est censé être unique.
J'ai quelques dupliquer les données dans ma table, et je suis tente de le supprimer. Cependant, je suis venue à la conclusion qu'il n'y a pas assez d'informations avec les données fournies pour moi à discerner une ligne de l'autre, et fondamentalement aucun moyen pour moi de supprimer l'une des lignes en double. Ma conjecture est que j'ai besoin d'introduire une sorte de colonne d'identité, qui pourrait m'aider à identifier une ligne de l'autre.
Est-ce correct, ou est-il une manière magique de la suppression d'un, mais pas les deux en double des données avec une requête?
MODIFIER Modifié afin de préciser que tickId et timestamp liste déroulante doit être unique, mais il n'est pas en raison de la duplication des données.
À partir de SQL Server 2005 est une manière magique pour supprimer un seul des doublons. Quelle version de SQL server utilisez-vous? Après avoir corrigé les dupliquer le problème, vous devez ajouter une contrainte de clé primaire de la table.
Merci Mikael, je suis à l'aide de SQL Server 2005. J'avais une contrainte unique, toutefois, j'ai été la consolidation des données provenant de plusieurs tables dans une seule table, et ces tables avaient données en double. J'ai pensé que le moyen le plus facile a été de vider tout dans un seul tableau, supprimer les doublons, puis ajouter la contrainte après.
La "magie de requête" est fourni par Sergey.
OriginalL'auteur steve8918 | 2012-03-25
Vous devez vous connecter pour publier un commentaire.
Voici une requête qui permettra de supprimer les doublons et de laisser exactement une copie de chaque ligne unique. Il fonctionne avec SQL Server 2005 ou supérieur:
Belle réponse à partir d'une première minuterie 🙂 Bienvenue sur stackoverflow.
OriginalL'auteur Sergey Rybalkin
select distinct * into temp_table from source_table
(ce tableau sera créé pour vous)supprimer de temp_table (ce que vous n'avez pas besoin)
OriginalL'auteur Jester
Peut-être que je ne comprends pas votre question correctement, mais si "tickId" et "timestamp" sont garantis d'être unique, alors comment fais tu pour avoir des données en double dans votre tableau? Pourriez-vous donner un exemple ou deux de ce que tu veux dire?
Toutefois, si vous avez des doubles de tous les trois colonnes à l'intérieur de la table le script suivant peut travailler. Merci de l'essayer et d'en faire une sauvegarde de la base de données avant de mettre en œuvre, comme je viens de le mettre ensemble.
OriginalL'auteur NuNn DaDdY