アドレステーブルには、タイプと従業員ごとに1つ以上のアドレスがあります。各行には有効期限がありますが、終了日はありません。私は従業員の次の住所有効日を使用して終了日を「偽造」する必要があります。次のレコードの開始日である終了日を追加します(linqからsqlへ)
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
私のSQLは動作しますが、LINQ to SQLの中で動作するようにそれを得ることはされていると問題ました:
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
結果は次のようになります。
ソース表があります。タイプが考慮されていないため、SQLがベストであるかどうかはわかりません。しかし、現在、私のすべてのデータはホームタイプのアドレスしか持っていません。 Idは他のタイプのアカウントも好きです。私は、LINQを最適化しようとしませんでしたが(おそらく別にグループは、より効率的である)、
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
あなたは何が間違っているのかを指摘し、間違いを訂正できるように、Linqに翻訳しようとしてください。 – Mat
タイプの場合、 'ADDRESS_TYPE = A.ADDRESS_TYPE'比較をサブクエリのwhere句に追加するだけです。 – juharr
はい@Matですが、解決策がどこから離れすぎていたかが分かりすぎて、問題が発生する原因となります。 – Jazzy