2012-03-16 62 views
0

这是一个可爱的一点SQL,我不能写。 :)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] 

谢谢你也许可以给任何帮助。 :)

+1

能否请您发表您的表结构或创建附加的表小提琴? – 2012-03-16 09:43:35

回答

2

尝试:

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 
+0

@philbird:与相关的子查询相比,它应该更加高效 - 分析函数在处理方面相对昂贵,但通常比多表访问要少得多。 – 2012-03-16 10:51:46

+0

谢谢马克。我正在写一个统计应用程序,所以我应该更好地理解这一点。 :)我会阅读。 – philbird 2012-03-16 11:02:37

0

我认为这应该做你想要的。没有你的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 
+0

谢谢你有一个流行的巴里。 :)它告诉我;聚合可能不会出现在WHERE子句中,除非它位于包含在HAVING子句或选择列表中的子查询中,并且被聚合的列是外部引用。 – philbird 2012-03-16 10:43:50

+0

@philbird:我错过了我添加的'From'子句。这条线对我来说工作得很好。你添加了什么? – codingbadger 2012-03-16 10:47:37