繁体   English   中英

sql唯一并加入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM