2016-07-29 2 views
2

SQL Server 2008 R2を使用する毎日テーブルに格納されているユーザーから最後のログイン時刻を取得しようとしています。MAXレコードからDATEDIFFをカウントする

以下のクエリは、ユーザごとにその情報をプル:

SELECT 
    [Login_name], 
    MAX([last_login_time]) as Last_login_date, 
    [server_instance] 
FROM 
    [dbo].[User_Login_Audit] 
WHERE 
    Login_name NOT IN ('NT AUTHORITY\SYSTEM', 'sa','') 
GROUP BY 
    Login_name, server_instance 

次のような結果は次のとおりです。

User_name | 2016-07-28 | Server/Instance 

私が欲しいものはそのGETDATE()の間の日数を追加することができることです最後の列として追加してください。

私は次のコードを使用しようとしましたが、記録された毎日の値を返しますまたはそのユーザー。私が何か明白なものを見逃していると確信しているので、どんな助けもありがたい。

SELECT 
    [Login_name], 
    MAX([last_login_time]) AS Last_login_date, 
    [server_instance], 
    DATEDIFF(day, getdate(), last_login_time) AS Days 
FROM 
    [dbo].[User_Login_Audit] 
WHERE 
    Login_name NOT IN ('NT AUTHORITY\SYSTEM', 'sa','') 
GROUP BY 
    Login_name, server_instance, last_login_time 
+0

あなたは、私はエラーを取得することをできるだけ早く私がそうであるようにセクション – Mat

+0

により、グループから_last_login_time_を削除する必要があります。メッセージ8120、レベル16、状態を1、Line 4 カラム 'dbo.User_Login_Audit.last_login_time'は、集約関数またはGROUP BY句に含まれていないため、選択リストでは無効です。 – bwilliamson

答えて

2

このお試しください:

SELECT [Login_name], 
    max([last_login_time]) Last_login_date, 
    [server_instance], 
    DATEDIFF(day, getdate(), max([last_login_time])) Days 
FROM [dbo].[User_Login_Audit] 
where Login_name not in ('NT AUTHORITY\SYSTEM', 'sa','') 
Group by Login_name, server_instance 
+0

それはそれをやった。とても有難い。 – bwilliamson

+0

ええ、 'last_login_time'をgroup by節に追加するとすぐに、' last_login_time'の各値に対して1行の出力が得られます。 –

0
;with cte 
as 
(SELECT 
[Login_name] 
,max([last_login_time]) as Last_login_date 
,[server_instance], 
FROM [dbo].[User_Login_Audit] 
    where Login_name not in ('NT AUTHORITY\SYSTEM', 'sa','') 
Group by Login_name,server_instance 
) 
select *, 
DATEDIFF(day,getdate(),Last_login_date) 
from cte 
+0

この溶液も同様に作用した。助けてくれてありがとう。 – bwilliamson

0
SELECT 
    u1.[Login_name], 
    u1.[server_instance], 
    COALESCE(MAX(u2.[last_login_time]),'No previous') AS Last_login_date, 
    COALESCE(DATEDIFF(day, getdate(), MAX(u2.last_login_time)), 'No previous') AS Days 
FROM 
    [dbo].[User_Login_Audit] ua1 
    LEFT JOIN [dbo].[User_Login_Audit] ua2 ON ua1.[Login_name] = ua2.[Login_name] and 
               ua1.[server_instance] = ua2.[server_instance] and 
               u1.[last_login_time] > u2 .[last_login_time] 
WHERE 
    u1.Login_name NOT IN ('NT AUTHORITY\SYSTEM', 'sa','') 
GROUP BY 
    u1.Login_name, u1.server_instance 
関連する問題