2012-03-16 40 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