2016-04-06 14 views
0

Ich habe eine Tabelle, die Datensätze der Daten von Arbeitgebern und Mitarbeitern verwaltet. So etwas wie diesesSQL Server: Abfrage, Datensatz mit dem neuesten Eintrag zu aktualisieren

EmployerName EmployerPhone EmployerAddress EmployeeName EmployeePhone EmployeeAddress Date 
------------------------------------------------------------------------------------------------------- 
John    12345  NewYork   Harry  59786   NewYork  12-1-1991 
Mac    22345  Bankok   John   12345   Delhi   12-3-1991 
Smith    54732  Arab   Amar   59226   China   21-6-1991 
Sarah    12345  Bhutan   Mac   22345   NewYork  5-9-1991 
Root    85674  NewYork   Smith  54732   Japan   2-11-1991 

Ich habe eine andere Tabelle, die allgemeine Aufzeichnungen auf der Grundlage von phone number (beide Arbeitgeber und Arbeitnehmer) haben wird.

Tabellenstruktur ist, wie folgend

Phone Name Address 

Ich möchte neuesten Aufzeichnungen according to date von Table1 zu Table2 auf der Basis von phone ..

Gefällt Ihnen dieses

Phone Name Address 
----------------------- 
59786 Harry NewYork 
22345 Mac NewYork 
59226 Amar China 
12345 Sarah Bhutan 
22345 Mac NewYork 
85674 Root NewYork 
54732 Smith Arab 

Ich habe setzen schrieb viele Abfragen, konnte jedoch keine gefundenen Ergebnisse finden.

Jede Art von Hilfe wird geschätzt.

+1

Definiere 'späteste'. – Raj

+0

bedeutet der neueste/neueste Eintrag nach Datum Spalte –

+0

Erstellen Sie eine Ansicht anstelle dieser zweiten Tabelle. (Oder Spalten berechnet haben.) – jarlh

Antwort

1

für die Tabelle ohne Telefon Duplikate initialisieren:

INSERT IGNORE INTO Table2 (Phone, Name, Address) 
     SELECT X.* FROM (
      SELECT EmployeeName,EmployeePhone,EmployeeAddress FROM Table1    
      UNION 
      SELECT EmployerName,EmployerPhone,EmployerAddress FROM Table1 
      ) X 
      WHERE NOT EXISTS (SELECT Phone FROM Table2 WHERE Phone=X.Phone) 
+0

Nein, keine von ihnen ist Primärschlüssel .. –

+0

Wenn das Telefon eindeutig ist, legen Sie einen eindeutigen Index zu diesem Feld. Sonst müssen Sie zwei Abfragen durchführen, eine für Einfügen und eine für Update – Plebios

+0

Ich bin auch mit zwei Abfragen in Ordnung. weil es nur eine einmalige Aktivität ist. –

1

Ich denke, das ist das, was Sie suchen, wenn ich das richtig verstehe Ihre Frage. Sollte einmalig funktionieren

DECLARE @restbl TABLE 
(
    Name   varchar(100), 
    Phone   varchar(20), 
    Addr   varchar(100), 
    [Date]   date, 
    RecType   varchar(100) 
) 
INSERT INTO @restbl 
SELECT EmployerName, EmployerPhone, NULL, MAX([Date]), 'Employer' 
FROM @tbl 
GROUP BY EmployerName, EmployerPhone 

INSERT INTO @restbl 
SELECT EmployeeName, EmployeePhone, NULL, MAX([Date]), 'Employee' 
FROM @tbl 
GROUP BY EmployeeName, EmployeePhone; 

WITH LatestData (Name, Phone, [Date]) 
     AS 
     (
      SELECT Name, Phone, MAX([Date]) 
      FROM @restbl 
      GROUP BY Name, Phone 
     ) 
INSERT INTO FinalTable (Name, Phone, [Address]) 
SELECT DISTINCT ld.Name, ld.Phone, ISNULL(tEmployer.EmployerAddress, tEmployee.EmployeeAddress) AS [Address] 
FROM LatestData ld 
     LEFT JOIN @tbl tEmployer ON ld.Name = tEmployer.EmployerName AND ld.Phone = tEmployer.EmployerPhone AND ld.Date = tEmployer.Date 
     LEFT JOIN @tbl tEmployee ON ld.Name = tEmployee.EmployeeName AND ld.Phone = tEmployee.EmployeePhone AND ld.Date = tEmployee.Date 
+0

etwas in der Nähe, was ich brauche .. –

Verwandte Themen