2016-11-15 3 views
0

私は3つのテーブルを持つデシベル持っているそれぞれの結果の1行を取得しますSQLの使用MAXまたはTOPにのみ

  • ユーザーユーザーID、ユーザー名
  • コンピュータを ComputerID、コンピューター
  • ログオン LogonDate、ユーザーID、コンピュータID

次のクエリを使用して、各コンピュータの最新のユーザー名とログオン日時を取得しようとしています。

SELECT MAX(LogonDate) AS LogonDate, ComputerName, Username 
FROM Users u, Computers c, Logons l 
WHERE u.UserID = l.UserID 
    AND c.ComputerID = l.ComputerID 
GROUP BY ComputerName, Username 
ORDER BY ComputerName 

当然のことながら、それはユーザーの最新のログオンを提示します。私は最新のエントリに制限したいと思います。

ヘルプ正しいJOIN構文を学び、この

SELECT (select MAX(l.LogonDate) from users z where z.UserID = u.UserId) AS LogonDate, c.ComputerName, u.Username 
FROM Users u, Computers c, Logons l 
WHERE u.UserID = l.UserID AND c.ComputerID = l.ComputerID 
GROUP BY c.ComputerName, u.Username 
ORDER BY c.ComputerName 
+1

タグを使用しているデータベースとあなたの質問。 –

+0

[古いスタイルのジョインを使って蹴るのが悪い](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - ANSI - ** 92 ** SQL標準(* ** 20年以上前**)のold * style *カンマ区切りのテーブル*スタイルのリストが*適切な* ANSI 'JOIN'構文に置き換えられましたその使用はお勧めしません –

答えて

0

:)をしてください。単純なルール:は、FROM句にカンマを使用します。だから、基本的なクエリは次のとおりです。

SELECT l.LogonDate, c.ComputerName, u.Username 
FROM Logons l JOIN 
    Users u 
    ON u.UserID = l.UserID JOIN 
    Computers c 
    ON c.ComputerID = l.ComputerID; 

は、最新のログオンを取得row_number()を使用したりするには、このような条件:

SELECT l.LogonDate, c.ComputerName, u.Username 
FROM Logons l JOIN 
    Users u 
    ON u.UserID = l.UserID JOIN 
    Computers c 
    ON c.ComputerID = l.ComputerID 
WHERE l.LogonDate = (SELECT MAX(l2.LogonDate) 
        FROM Logons l2 
        WHERE l2.ComputerID = l.ComputerID 
        ); 
0

ファーストを試してみてください
おかげ

+0

ありがとうございます。私はdbaではなく、自分自身を結びつけるだけの十分な知識を持っています。私は自分の道を改めようとします。 :) – user1151482

関連する問題