J'ai le tableau suivant pour lequel je dois obtenir les valeurs les plus récentes pour le groupe (nom, adresse). Cela signifie que j'ai besoin d'avoir le max (heure) pour chaque couple (nom, adresse) et obtenir le last_read pour cette valeur de temps. Comment puis-je faire cela dans une requête SELECT? P>
p>
4 Réponses :
Je pense que ci-dessous devrait fonctionner pour vous, vous devez utiliser edit Strong> p> Vous pouvez essayer d'autres réponses ou vérifier ci-dessous, qui utilise la table TEMP P> groupe par code> et max code> select max([time]) as last_read_time,
[name],
[address]
into #temp_table
from yourTable
group by [name],
[address]
select last_read
from yourTable as yt
inner join #temp_table t
on yt.[name] = t.[name]
and yt.[time] = t.last_read_time
IF OBJECT_ID('tempdb..#temp_table', 'U') IS NOT NULL
J'ai essayé cette requête où j'ai ajouté la colonne Last_read, mais malheureusement, il donne les valeurs correctes pour max (heure) mais des valeurs erronées pour Last_Read.
Dans la plupart des bases de données, une sous-requête corrélée est une bonne approche: en particulier, cela peut tirer parti d'un index sur (nom, adresse, heure) code) code >. p> p>
Vous pouvez utiliser row_number () code> si votre DBMS prend en charge select * from
(select *,row_number() over(partition by name,address order by time desc) rn
) t where t.rn=1
Aucune des solutions ci-dessus n'a fonctionné.
J'ai finalement trouvé la requête suivante qui fonctionne: merci tout le monde. P> p> p>
Subquiery où vous vous regroupez sur nom et adressez et récupérez le nom Max (Time), l'adresse et rejoignez ce résultat avec votre TAML est le moyen le plus courant. Je suis à peu près sûr que vous pouvez trouver des exemples sur ce site Web lorsque vous recherchez «SQL Max valeur par groupe ".. Vous devez mettre à jour la question pour inclure également le résultat attendu en tant que tableau de données formaté