2016-05-15 136 views
0

最後のログイン時のユーザーデータ、データの名前、電子メール、場所、日時のみを表示する必要があります。SQL Server 2008データベースからの最終ログイン時刻の取得

シナリオは、ユーザーが今、同じユーザの以降のログインのためにのみ、我々はeventonline.logindatetimeにlogintime保存...初めてとログイン日時のための彼女の自己をeventonline.participantテーブルに挿入されます/彼を登録しています。

以下は私が使用したクエリですが、最終ログイン日時の代わりにすべてのユーザーのログインデータを選択します。

select 
    a.firstname as Name, 
    a.Email as Email, 
    a.Address1 as Location, 
    a.MobileNo as Contact, 
    a.datetime, a.ID 
from 
    eventonline.participant a 
where 
    a.eventid = '" + Convert.ToString(ConfigurationManager.AppSettings["event_id"]) + "' 

union 

select 
    a.firstname as Name, 
    a.Email as Email, 
    a.Address1 as Location, 
    a.MobileNo as Contact, 
    b.datetime, b.Rid 
from 
    eventonline.participant a 
join 
    eventonline.logindatetime b on a.Id = b.Rid 
where 
    b.eventid = '" + Convert.ToString(ConfigurationManager.AppSettings["event_id"]) + "' 
order by 
    datetime desc 

答えて

0

あなたデータベース:eventonline 、表名:参加者、logindatetime

があなたの参加者のテーブルには、以下のデータが含まれてみましょう: -

REGISTRATION_IDを| user_phone | user_email | first_name | last_name | created_timestamp

1 | 5545555454 | [email protected] |トム|デイブ| 2016-03-05 21:33:55

2 | 5599992154 | [email protected] |リヤ| | 2016-03-05 15:33:55

3 | 5545876954 | [email protected] | greg |ジョージ| 2016年3月9日12時32分55秒

そしてlogindatetimeテーブルには、以下のデータがあります: -

IDを| registration_id | ip_address | user_Agent | created_timestamp

1 | 2 | 10.2.3.101 |モジラ| 2016-03-05 15:54:11

2 | 3 | 10.0.5.99 |クロム| 2016-03-15 23:31:01

3 | 1 | 10.0.4.43 |サファリ| 2016-04-01 21:33:55

4 | 2 | 10.2.4.65 |モジラ| 2016-04-05 19:21:55

5 | 1 | 10.6.5.54 |クロム| 2016-04-11 19:12:15

ここで、5番目の行に対応するログインデータ、つまりlogindatetimeの最新の行に対応するユーザーデータを取得する場合は、次のクエリが機能します。

選択a.registration_id、a.user_phone、a.user_email、a.first_name、a.last_name、b.ip_address、b.user_Agent、参加者からb.created_timestamp bとlogindatetimeをJOINここa.registration_id =としてb.registration_idの順序はb.created_timestamp desc limit 1;

結果

REGISTRATION_ID | user_phone | user_email | first_name | last_name ip_address | user_Agent | created_timestamp

1 | 5545555454 | [email protected] |トム|デイブ| 10.6.5。54 |クロム| 2016-04-11 19:12:15

+0

「SQL Server 2008」では「制限1」ですか? – lad2025

+0

さて、もしSQLサーバーがクエリの最初にSELECT TOP 1を使用し、上記のクエリから1つの部分を削除したら、 – TECH007

+0

'参加者からのJOIN logindatetimeとしてのbここでa.registration_id = b.registration_id' JOINでは' ON'ではなく 'WHERE' – lad2025

0

ここで私はそれを行うためのクエリを書く方法です。 sqlのrankover関数を使用して、見たいデータのパーティション内の最後または最初の値だけを取得しました。

SELECT 
* 
FROM 
(
    select 
     -- Here is the magic that makes it work. 
     Rank() over (Partition BY a.Email order by a.datetime DESC) as Rank 
     a.firstname as Name, 
     a.Email as Email, 
     a.Address1 as Location, 
     a.MobileNo as Contact, 
     a.datetime, 
     a.ID 
    FROM 
    <YourFromCause> 
) 
-- naming the temp result set. 
tmp 
where 
    Rank = 1 
関連する問題