webForumDet fria alternativet

DISTINCT trubbel i Senaste Användarna

Databaser & SQL

4 svar · 236 visningar · startad av Nson

Medlem sedan juni 2001145 inlägg
Frågan#1

Hejsan på er i blåsten. Har stött på patrull med en grej som är grymt enervernade och har inte fått rätt på det. Hoppas på tur att någon vill lägga ner en stund och hjälpa mig.

Vi vill visa senaste besökarna hos en viss användare.
Tabellen [dbo].[log.Visits] Innehåller

UserID (uniqueidentifier) - Ägarens unika användar ID
LogID (uniqueidentifier) - Besökarens unika användar ID
LogDate (datetime) - Tidstämpel via (getdate())

Denna körs varje gång någon besöker en viss sida. Men när vi visar data för senaste besökare så vill vi så klart snyggt visa ett användarnamn åt gången.

Problemet är våra användare ofta hamnar på användarens presentationssida fler gånger på raken och hamnar då ex antal gånger i [dbo].[log.Visits].

Vår sql sats ser nu ut så här :

	SELECT DISTINCT TOP 10  

	v.logDate as date,
	u.name as name,
	u.userid as userid

	
	FROM 
	[dbo].[log.Visits] v
	
	INNER JOIN 
	[dbo].[security.users] u ON v.logid = u.userid
	
	WHERE
	v.userId = @userId
	
	GROUP BY u.name, u.userid, v.logDate
	
	order v.logdate

Men det resulterar i en lista så som:

Iduro
Iduro
Iduro
Anettew
Anettew
Jonsson
Jonsson
Jonsson
Jonsson
Tripitaka

Jag försår att databasen ser detta som unika poster eftersom dom har olika v.logDate .. Men hur kan jag få detta att bara bli en
unik UserName ex,

Iduro
Annettew
Jonsson
Tripotaka

Extremt tacksam för all eventuell hjälp ...

Medlem sedan mars 20032 667 inlägg
#2

Distinkt fungerar ju som så att den ser till hela select-listan. Du kan alltid prova att enbart gruppera på samtliga fält i selectlistan istället, eller, eftersom det är så få poster sortera bort dubletterna när du presenterar dem.

Medlem sedan dec. 200012 464 inlägg
#3
SELECT TOP 10  
        v.logDate as date,
	u.name as name,
	u.userid as userid
FROM [dbo].[log.Visits] v
INNER JOIN [dbo].[security.users] u 
ON v.logid = u.userid
WHERE v.userId = @userId
and logdate in (select max(logdate) 
       from [dbo].[log.Visits] 
    where logid = v.logid
        and userid = @userID)
order by date desc
Medlem sedan mars 20032 667 inlägg
#4

Se där, där fick du ett svar från ett proffs också. :e

Medlem sedan juni 2001145 inlägg
#5

Helt underbart LarsG och K@llen, nu fungerar det underbart. Nu skall jag bara föröska förstå varför ochså :)

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)