Eine Adresstabelle enthält 1 oder mehr Adressen pro Typ und Mitarbeiter. Jede Zeile hat ein Adressdatum, aber kein Enddatum. Ich muss ein Enddatum "vortäuschen", indem ich das Datum des Inkrafttretens der nächsten Adresse der Mitarbeiter verwende.Enddatum zum Aufzeichnen hinzufügen Das ist das Startdatum des nächsten Datensatzes (linq to sql)
Die Quelltabelle ist:
EFFDT ADDRESS1 ADDRESS_TYPE EMPLID
12/21/1999 7927 SW 31st Ave HOME 6
4/15/2002 7070 Shady Lane HOME 6
3/18/2014 1228 Hall HOME 6
Das Ergebnis sollte sein:
EFFDT ADDRESS1 ADDRESS_TYPE EMPLID ENDDATE
12/21/1999 7927 SW 31st Ave HOME 6 4/15/2002
4/15/2002 7070 Shady Lane HOME 6 3/18/2014
3/18/2014 1228 Hall HOME 6 NULL
My SQL funktioniert, aber es immer in Linq to SQL arbeiten war und Ausgabe. Ich bin mir nicht sicher, ob das SQL das beste ist, weil es Typ nicht berücksichtigt. Aber derzeit haben alle meine Daten nur Adressen vom Typ HOME. Ich möchte auch andere Typen berücksichtigen. Hier ist die SQL:
Select A.EFFDT, A.ADDRESS1, A.ADDRESS_TYPE, A.EMPLID,
(SELECT MIN(EFFDT)
FROM dbo.PS_ADDRESSES
WHERE EFFDT > A.EFFDT AND EMPLID = A.EMPLID) as EndDate
FROM dbo.PS_ADDRESSES A
ORDER BY A.EMPLID
Sie sollten Ihren Versuch zeigen, ihn in Linq zu übersetzen, damit die Leute auf Ihre Fehler hinweisen und Ihre Fehler korrigieren können. – Mat
Für den Typ müssen Sie nur den Vergleich "ADDRESS_TYPE = A.ADDRESS_TYPE" mit der WHERE-Klausel der Unterabfrage hinzufügen. – juharr
Ja @Mat, aber ich fühlte, wo ich hinging mit der Lösung war zu weit weg, und würde dazu führen, dass die Frage von der Spur gehen. – Jazzy