0

ユーザーの過去 3 回のログイン タイミングをデータベースに保存しています。その後、次の手順を使用して、ユーザーの最後のログインの詳細を取得します。残念ながら、ユーザー ログイン ダッシュボードで現在のログイン日時を取得しています。次の手順の修正にご協力ください。

ALTER PROCEDURE [dbo].[gspVEBUserLastLoginDetails_GetLastLogin]
    (@userLastLoginUserId bigint = null)
AS
   select Top 1 NewDate  
   from 
     (SELECT
         TOP 2 (CONVERT(varchar(26), UserLastLogin_Date,107)+' '+RIGHT(CONVERT(VarChar, UserLastLogin_Date, 100), 7)) as NewDate
      FROM
         [dbo].[VEB_UserLastLoginDetails]
      WHERE  
         (@userLastLoginUserId IS NULL OR [UserLastLogin_UserId] = @userLastLoginUserId)
      ORDER BY
          NewDate DESC) AS  t1
4

1 に答える 1

1

試す:

ALTER PROCEDURE [dbo].[gspVEBUserLastLoginDetails_GetLastLogin]
(
    @userLastLoginUserId bigint = null
)
AS
BEGIN
    IF COALESCE(@userLastLoginUserId,0)<>0
    BEGIN
        SELECT MAX(VEB_UserLastLoginDetails.UserLastLogin_Date)
        FROM VEB_UserLastLoginDetails
        WHERE VEB_UserLastLoginDetails.UserLastLogin_UserID = @userLastLoginUserID;
    END
    ELSE
    BEGIN
        SELECT MAX(VEB_UserLastLoginDetails.UserLastLogin_Date)
        FROM VEB_UserLastLoginDetails;
    END
END
GO

ここでいくつかの仮定を立てています。私が使用したテーブルは次のとおりです。

CREATE TABLE VEB_UserLastLoginDetails
(
    UserLastLogin_Date datetime
    , UserLastLogin_UserID INT
);

そして、次を使用していくつかの行を挿入しました。

INSERT INTO VEB_UserLastLoginDetails VALUES (GETDATE(), 1);
    GO 3;

次に、次を使用してストアド プロシージャを実行しました。

EXEC gspVEBUserLastLoginDetails_GetLastLogin 1;

当然、最新のログインである最大の日付を返します。

次のように、UserID を渡さずにストアド プロシージャを実行する場合:

EXEC gspVEBUserLastLoginDetails_GetLastLogin;

実際にログインしたユーザーに関係なく、最新のログインを返します。

于 2013-09-18T16:24:12.990 に答える