2016-05-15 4 views
0

Ich muss nur letzte Login-Zeit Benutzerdaten anzeigen, Daten werden - Name, E-Mail, Ort und Datum-Zeit.Holen Sie sich letzte Login-Zeit von SQL Server 2008 Datenbank

Szenario ist Benutzer registriert sich selbst zum ersten Mal und Login Datetime wird in eventonline.participant Tabelle eingefügt ... jetzt für die nachfolgende Anmeldung des gleichen Benutzers speichern wir nur Logintime in eventonline.logindatetime.

Unten ist die Abfrage, die ich verwendet habe, aber es wählt alle Benutzer-Login-Daten statt letzte Login-Datetime.

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 

Antwort

0

Ihre Datenbank: eventonline , Tabellennamen: Teilnehmer, logindatetime

Lassen Sie sagen, Ihre Teilnehmer-Tabelle enthält folgende Daten: -

registration_id | user_phone | Benutzer_Email | Vorname | letzter_name | created_timestamp

1 | 5545555454 | [email protected] | tom | Dave | 2016-03-05 21:33:55

2 | 5599992154 | [email protected] | Riya | unten | 2016-03-05 15:33:55

3 | 5545876954 | [email protected] | greg | george | 2016-03-09 12:32:55

Und logindatetime Tabelle folgende Daten: -

id | Registrierungs-ID | IP-Adresse | Benutzer_Agent | created_timestamp

1 | 2 | 10.2.3.101 | mozilla | 2016-03-05 15:54:11

2 | 3 | 10.0.5.99 | Chrom | 2016-03-15 23:31:01

3 | 1 | 10.0.4.43 | Safari | 2016-04-01 21:33:55

4 | 2 | 10.2.4.65 | mozilla | 2016-04-05 19:21:55

5 | 1 | 10.6.5.54 | Chrom | 2016-04-11 19:12:15

Jetzt, wenn Sie die Benutzerdaten zusammen mit Anmeldedaten entsprechend der 5. Reihe, d. H. Die neueste Zeile in logindatetime Zeit abrufen möchten, dann unter Abfrage funktioniert.

wählen a.registration_id, a.user_phone, a.user_email, a.first_name, a.last_name, b.ip_address, b.user_Agent, b.created_timestamp von Teilnehmern als JOIN logindatetime als b, wo a.registration_id = b.registration_id Sortierung nach b.created_timestamp desc limit 1;

Ergebnis

registration_id | user_phone | Benutzer_Email | Vorname | Nachname_Ip_Adresse | Benutzer_Agent | created_timestamp

1 | 5545555454 | [email protected] | tom | Dave | 10.6.5.54 | Chrom | 2016-04-11 19:12:15

+0

'limit 1' mit' SQL Server 2008'? – lad2025

+0

Okay, wenn sein SQL-Server dann Benutzer SELECT TOP 1 am Anfang der Abfrage und entfernen Sie Limit 1 Teil von oben Abfrage. – TECH007

+0

'vom Teilnehmer als JOIN logindatetime als b wobei a.registration_id = b.registration_id' JOIN benötigt' ON' nicht 'WHERE' – lad2025

0

Hier ist, wie ich über das Schreiben der Abfrage gehen würde, um es zu tun. Ich habe die rank-over-Funktion in sql verwendet, um nur die letzten oder ersten Werte in einer Partition von Daten zu erfassen, die ich betrachten möchte.

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 
Verwandte Themen