[英]sql unique and join
这是一个可爱的SQL,我不能写。 :)
我需要做的就是这个;
从表(CreatedOn)中为每个用户选择特定StatID的最新值。 然后我需要加入usertable(ssUSER)并选择u.username,我还需要从表中加入detailstatid。 即我只需要为每个用户提供此表的最新结果,然后对用户和detailstatid进行连接。
SELECT TOP 1000
[DetailStatUserLogID]
,[UserID]
,[DetailStatID]
,[OverviewID]
,[Count]
,[StatPercent]
,[SpecificDate]
,[CreatedOn]
,[ModifiedOn]
,[Note]
,[LoggedDate]
,[OverViewGUID]
FROM [StartStop].[dbo].[DetailStatUserLog]
SELECT TOP 1000
[DetailStatID]
,[DetailStatGUID]
,[NameOfStat]
,[DetailOfStat]
,[CreatedByType]
,[DataType]
,[CreatedByGUID]
,[CreatedBy]
,[ModifiedOn]
,[CreatedOn]
,[OverviewID]
FROM [StartStop].[dbo].[DetailStat]
SELECT TOP 1000
[UserID]
,[EmailAddress]
,[Authenticated]
,[UserName]
FROM [StartStop].[dbo].[ssUsers]
感谢您提供的任何帮助。 :)
尝试:
select /* entered desired fields here */
from (select l.*,
row_number() over (partition by [UserID], [DetailStatID]
order by [CreatedOn] desc) rn
from DetailStatUserLog l) ll
join ssUsers u on ll.[UserId] = u.[UserId]
Join DetailStat s on ll.[DetailStatId] = s.[DetailStatId]
where ll.rn=1
我想这应该是你想要的。 没有您的DDL或数据很难测试。
Select u.UserName,
ds.DetailedStat,
dsl.CreatedOn,
dsl.DetailStatId,
dsl.UserId
From
(
Select d.UserId, d.DetailStatId, Max(d.CreatedOn) as [CreatedOn]
From DetailStatUserLog d
Where d.CreatedOn = (Select Max(CreatedON)
From DetailStatUserLog
Where UserID = d.UserId
And DetailStatId = d.DetailStatId
)
Group By d.UserId, d.DetailStatId
)dsl
Join ssUsers u on dsl.UserId = u.UserId
Join detailstat ds on dsl.DetailStatId = ds.DetailStatId
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.