j'ai 4 instructions select:Combiner sélectionner top 1 des instructions SQL
SELECT top 1 software, auditDate, versionNumber FROM table1 where software = 'software1' order by auditDate desc
SELECT top 1 software, auditDate, versionNumber FROM table1 where software = 'software2' order by auditDate desc
SELECT top 1 software, auditDate, versionNumber FROM table1 where software = 'software3' order by auditDate desc
SELECT top 1 software, auditDate, versionNumber FROM table1 where software = 'software4' order by auditDate desc
Actuellement, chaque instruction select retourne une table avec une ligne comme celle-ci:
software | auditDate | versionNumber
1| software1 | 8/22/2017 | 5.0
Si la condition top 1
n'a pas été là, alors la table de résultat aurait plus de lignes du même logiciel avec différents auditDate
et versionNumber
, mais j'avais seulement besoin de l'enregistrement le plus récent (auditDate
) pour chaque logiciel.
Je voudrais rouler toutes ces instructions select dans une requête qui retourne un tableau similaire à ceci:
software | auditDate | versionNumber
1| software1 | 8/22/2017 | 5.0
2| software2 | 8/20/2017 | 5.3
3| software3 | 8/21/2017 | 4.9
4| software4 | 8/16/2017 | 5.6
où chaque ligne est la même que la déclaration individuelle select top 1
ci-dessus. Un UNION
ne semble pas fonctionner à cause de la clause order by
et je suis perplexe pour d'autres solutions.
Si je comprends bien, le générique pour ceci est «Top N with ties» et doit être accompagné d'une clause «order by». Je ne comprends pas la partie «Partition», pourriez-vous donner quelques explications? – CuriousOne
@CuriousOne Cette approche ne génère pas de champ supplémentaire comme l'approche CTE. Row_Number() est une fonction de fenêtre, elle va générer une séquence de nombres 1 - n "réinitialisation" pour chaque logiciel, ordre par la date décroissante. Si vous n'êtes pas à l'aise avec les fonctions de la fenêtre, cela vaut la peine d'expérimenter. Ils peuvent être inestimables! –
Merci pour la clarification. Je ne suis pas trop expérimenté avec SQL mais quand je commencerai mon étude en profondeur, je me souviendrai de faire des recherches sur les fonctions de cette fenêtre. :) – CuriousOne