J'ai le jeu de données suivant
Je voudrais interroger les données pour produire une liste de noms d'hôte uniques par nom d'utilisateur avec le dernier identifiant Le temps pour cet enregistrement est également inclus. Par exemple, produire le jeu de données suivant. P>
L'objectif est de détecter le partage de compte des utilisateurs, ainsi que des utilisateurs ayant un nombre anormalement élevé de Noms d'hôte. P>
Je sais assez de SQL pour me procurer des ennuis, mais je n'écris tout simplement pas assez souvent pour être assez compétent pour écrire celui-ci sans souffler une demi-journée. Quelqu'un peut-il aider? P>
Nous utilisons Azure SQL (SQL Server), mais je peux traduire des réponses d'une autre langue SQL. P>
merci p>
J'ai utilisé ce qui suit p> qui renvoie un bon jeu de données, mais lorsque j'essaie ce qui suit, il renvoie 0 enregistrements malgré la Query ci-dessus montrant plusieurs noms d'utilisateur sur le même nom d'hôte p>
4 Réponses :
Je voudrais interroger les données pour produire une liste de noms d'hôte uniques par nom d'utilisateur avec le dernier temps de connexion pour cet enregistrement également inclus. P>
Je pense que vous voulez juste
groupe par code>: p>
xxx pré> blockQuote>
Je veux filtrer, donc je ne vois que le dernier identifiant pour un nom d'hôte donné, je ne veux pas voir le même nom d'utilisateur / nom d'hôte des milliers de fois.
@Rouleaux . . . Cela montre une paire de nom d'utilisateur / nom d'hôte exactement une fois, donc je ne comprends pas votre commentaire. Si vous voulez la dernière connexion pour un nom d'hôte donné, pourquoi vos résultats ont-ils deux rangées pour Host2?
Je ne veux pas la dernière connexion. Je souhaite détecter le partage de compte en montrant plusieurs noms d'utilisateur utilisés sur le même nom d'hôte. Je veux aussi voir quand un nom d'utilisateur a été utilisé sur un grand nombre de noms d'hôte
@Rouleaux . . . Vous décrivez votre problème comme "Je voudrais interroger les données pour produire une liste de noms d'hôte uniques par nom d'utilisateur avec le dernier temps de connexion pour cet enregistrement également inclus." groupe par code> fait exactement cela. Si vous avez un problème différent, vous devez demander à une question nouvelle i>.
Vous pouvez utiliser Row_Number () pour cela.
select * from table1 t1 inner join (select row_number() over (partition by HostName, UserName order by LoginTimeUTC desc) as rn, UserName ,LoginTimeUTC, HostName from table1) as t2 on t2.UserName = t1.UserName and t2.LoginTimeUTC = t2.LoginTimeUTC and t2.HostName = t1.HostName where t2.rn = 1
Si je comprends bien, 2 résultats sont attendus sans envisager l'heure de connexion, les PLS ont un essai inférieur à la requête:
select username,hostname, count(*) over (partition by hostname) as NUMBER_OF_USERS_FOR_THIS_HOST, count(*) over (partition by username) as NUMBER_OF_HOSTS_FOR_THIS_USER from loginrecords group by username, hostname;
D'abord, j'ai créé un environnement de test en utilisant les requêtes ci-dessous. Ce serait bien si vous fournissez vous-même ces données (ou des données tabulaires textuelles) dans les prochaines questions. Les captures d'écran avec des données sont très hostiles à des fins de test.
username hostname (No column name) user1 host1 22/08/2019 9:51 user1 host2 30/08/2019 10:51 user2 host2 25/08/2019 9:51 user2 host3 30/08/2019 9:51 user3 host4 30/08/2019 10:51 user3 host5 25/08/2019 5:51 user4 host6 30/08/2019 10:51 user4 host7 30/08/2019 5:51
Dans votre deuxième partie de la question: "Sélectionnez Nom d'utilisateur, Nom d'utilisateur, Max (LogintiMeTC) auprès du groupe Nom d'utilisateur, Nom d'utilisateur comptant (Distinct (Nom d'hôte))> 1" Vous vérifiez des combinaisons uniques de [Nom d'utilisateur, HostName]. Et dans ce résultat, vous ne seriez pas d'enregistrement avec le nombre (distinct (nom d'hôte))> 1