2012-03-16 2 views
0

これは私が書くことができない素敵な少しのSQLです。 :)SQLのユニークで結合してください

私はこれを行う必要があります。

特定のStatIDに対して、各ユーザーのテーブル(CreatedOn)から最新の値を選択します。私はその後、ユーザーテーブル(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

あなたのテーブル構造を投稿したり、追加のテーブルとフィドルを作成していただけますか? –

答えて

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:相関サブクエリと比較すると、解析機能は処理の点では比較的高価ですが、通常は複数のテーブルアクセスよりもはるかに効率的です。ありがとうございます。 –

+0

私は統計アプリケーションを書いているので、これをもっとよく理解しておくべきです。 :)私は周りを読むでしょう。 – philbird

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

バリーにポップを持ってくれてありがとう。 :)それは私に言います;集約は、HAVING節または選択リストに含まれるサブクエリにあり、集約されている列が外部参照でない限り、WHERE節に表示されません。 – philbird

+0

@philbird:私が追加した 'From'節が欠けていました。それは私にとってはうまくいくのですか?何かを追加しましたか? – codingbadger

関連する問題