obtenir seulement la dernière ligne de chaque jour de multiples entrées dans TSQL
J'ai une table, quelque chose comme:
Id Name EnteredOn Percentage
`````````````````````````````````````````````````````````````
01 person1 2011-03-09 17:29:35.683 56.29
02 person1 2011-03-09 17:29:35.731 76.29
03 person1 2011-03-09 18:15:78.683 56.29
04 person1 2011-03-10 17:29:35.683 56.29
05 person1 2011-03-10 16:29:31.683 56.29
06 person1 2011-03-11 17:29:35.683 56.29
Pour résumer le tableau ci-dessus, il y a trois lignes pour jour 09, et deux lignes pour jour 10.
Maintenant, je veux juste de sélectionner la dernière ligne une seule ligne - par jour.
(une ligne pour 9, un 10 et 11)
Je ne peux pas utiliser distinctes en raison de l'horodatage. Je ne peux pas le groupe et d'utilisation:
CAST(CONVERT(FLOAT, EnteredOn) AS INT)
parce que quand je sélectionne EnteredOn champ, il les plaintes que ce n'est pas regroupés. Je ne peux pas combiner distinct(cast..date...)
parce que je ne peux pas obtenir le droit de syntaxe.
Comment puis-je sélectionner uniquement Nom, EnteredOn, Pourcentage champs distincts pour chaque jour?
merci beaucoup à l'avance.
OriginalL'auteur iamserious | 2011-03-24
Vous devez vous connecter pour publier un commentaire.
partition
- à quoi ça sert? cette requête ralentir sur un grand nombre de lignes? merciaussi, cette méthode tient compte uniquement sur la date, désolé de ne pas avoir mentionné avant, je veux être en mesure de filtrer sur la personne de trop.
l'ajout d'dernier commentaire
select one row per day of a particular person and particular percentage
- quelque chose comme cela..Le
partition by
est une sorte de au lieu de la clause group.row_number()
s'incrémente pour chaque ligne dans l'ordre spécifié parorder by
.partition
détermine quand lerow_number
devrait commencer à partir de 1 à nouveau. Donc, si vous avez besoin de regrouper parName
ainsi vous devez étendre la partition àpartition by datediff(d, 0, EnteredOn), Name
et ainsi de suite pour plus de champs dont vous avez besoin pour groupe. Je ne peux rien dire à propos de la performance autre que celle que vous devriez exécuter des tests avec les requêtes suggérées ici et de choisir celui qui a la meilleure performance sur votre de données.OriginalL'auteur Mikael Eriksson
1 rangée/jour:
1 ligne/personne/jour:
group by clause
inclureId
trop?vous avez raison, l'Id n'a rien à voir avec ce que vous avez besoin
Merci beaucoup de m'aider 🙂
vous êtes les bienvenus.
OriginalL'auteur manji
OriginalL'auteur Lamak
Je dirais un truc plus ici:
OriginalL'auteur Vadim Loboda