SQL: récupérer uniquement les enregistrements dont la valeur a changé
Désolé pour le simple titre. Je vais éditer au fur et à mesure.
J'ai une table RateTable
:
| Code | Date | Rate |
B001 2009-01-01 1.05
B001 2009-01-02 1.05
B001 2009-01-03 1.05
B001 2009-01-04 1.05
B001 2009-01-05 1.06
B001 2009-01-06 1.06
B001 2009-01-07 1.06
B001 2009-01-08 1.07
Il y a une entrée pour chaque jour, mais le Taux de change rarement. Puis-je écrire une requête SQL qui retourne uniquement les lignes dans lesquelles un Taux de changement se produit? Je suis à l'aide de sql server
Voir stackoverflow.com/questions/11127461/... pour un plus moderne sql-server répondre
OriginalL'auteur Mike Sickler | 2009-03-27
Vous devez vous connecter pour publier un commentaire.
Si j'ai lu ce droit, vous n'êtes pas à la recherche de lignes modifiées, mais les lignes où le taux de change de la date précédente. Cette requête ou quelque chose comme ça devrait le faire:
Je l'ai lu une couple de fois, si votre lecture est de droite alors il en a été votre solution, bien sûr...
fantastique - merci!
OriginalL'auteur David M
Si votre SGBDR prend en charge des fonctions analytiques ensuite la méthode optimale est presque certainement ce:
OriginalL'auteur David Aldridge
Ajouter une nouvelle colonne qui sera un DateTime et de la piste que lorsque le taux de changé. Ensuite, vous pouvez simplement retourner toutes les colonnes qui DateModified >= x Où x est la dernière fois que vous avez vérifié.
OriginalL'auteur JoshBerke
Je voudrais ajouter [ModifiedDate] colonne de votre table et de mettre à jour sa valeur à chaque fois qu'un nouveau dossier est insérée ou mise à jour. Ensuite, vous serez en mesure d'obtenir des données de la table en fonction de cette colonne:
OriginalL'auteur Konstantin Tarkus
Si vous ajoutez une nouvelle colonne "LastChangedDate" et que vous suivez la dernière lecture dans une autre table (ie. LastReadedValues), que vous pouvez facilement suivre les changements.
OriginalL'auteur boj
Je vous conseille, si vous avez plus de contrôle à ce point, à seulement droit bookended de données. En d'autres termes, seulement écrire un enregistrement à la table lorsque les changements de taux. Vous pouvez alors supposer que toutes les données entre les modifications sont restés les mêmes. Cela permettra de réduire considérablement la quantité de données dont vous avez besoin pour stocker.
Cela dit, cette requête, ou quelque chose comme ça, quelque chose à accomplir ce que vous me demandez:
modifier: désolé, changement de max min
oh, criminey. Vous avez absolument raison. Eh bien...les Ignorer my SQL, mais je préfère toujours prendre les conseils d'avant.
OriginalL'auteur dustyburwell
comment de cette approche, les gars?
ajouter un peu de colonne nommée ChangedSinceLastRead, 1 à chaque fois que vous modifiez la valeur dans ce tableau et dans votre requête select lire "SELECT * from Taux d'OÙ ChangedSinceLastRead = 1"
après cette requête select feu une autre requête "Taux de mise à JOUR DÉFINI ChangedSinceLastRead = 0"
bien que vous avez à feu 1 requête de mise à jour sur ce, vous n'avez pas à calculer à l'encontre de dates dans vos sélectionner et votre table de stockage prend moins de place (comme bit est la plus petite à la datetime)
juste une autre façon de résoudre ce problème 😉 je serais ravi de voir les implications sur les performances, ainsi que l'a suggéré datetime approche
OriginalL'auteur Raj