2009-08-07 4 views
0

私はテーブルの監査ログインを持って、私は、以下のSQLを達成し、各ユーザのための最新のログインを抽出したいと思います。group by節および/またはaggregate関数を使用してSQLクエリをlinqからsqlに変換しますか?

どのように私は、SQLクエリにLINQにSQLクエリをフォーマットしますか?

SELECT * FROM AuditTable adt1 
    inner join UserTable usr 
     on adt1.[UserName] = usr.[User_Id] 
WHERE [TimeStamp] = (SELECT MAX([TimeStamp]) 
         FROM AuditTable adt2 
         WHERE adt1.UserName = adt2.UserName) 

SQLのクエリでは、もう1つの方法を書いています。

SELECT adt1.[UserName], usr.First_Name, max([TimeStamp]) as [TimeStamp] 
FROM AuditTable adt1 
    INNER JOIN UserTable usr 
     on adt1.[UserName] = usr.[User_Id] 
GROUP BY adt1.[UserName] ,usr.First_Name 

答えて

0

...答えはletキーワードを使用することでした。さておき、私は非常にこれらの事をうまくしようとしたときLinqPadを使用することをお勧めとして

from adt in AuditTable 
    join usr in UserTable 
     on adt.UserName equals usr.User_Id 
group adt by 
    new { adt.UserName, adt.Roles, usr.First_Name, usr.Last_Name } 
into g 
let LastAccessed = g.Max(a => a.TimeStamp) 
select new 
    { UserName = g.Key.UserName, 
     Roles = g.Key.Roles, 
     FirstName = g.Key.First_Name, 
     LastName = g.Key.Last_Name, 
     TimeStamp = LastAccessed 
    } 
2

クエリ#2:dc.AuditTableでADT1から


新しい選択adt1.usernameのint型のAGによってadt1.UserName == usr.UserID
グループADT1にdc.UserTableにUSR参加{ユーザー名= ag.Key、TSMax = ag.Max(TS => adt1.TimeStamp)}

ユーザテーブルに参加なぜ?フィルタ?私はそれが働いて得た

+0

ありがとうございました。最後に完了しました。完全な回答は以下です:-) –

関連する問題