テーブルから正しいデータを選択するためのクエリに問題があります。enddate が null でない日付のデータ行を見つけようとしていますが、思ったより難しいことがわかりました。
私のクエリはこれです:
SELECT ms1.* FROM STATUS MS1
INNER JOIN
(
SELECT MS.EndDate, MS.MemberID, MS.MemberStatusID,
MS.StartDate , M.IdentificationNumber
FROM MEMBER M
INNER JOIN STATUS MS ON MS.MemberID = M.MemberID
AND MS.StartDate =(SELECT MAX(StartDate) FROM STATUS WHERE STATUS.MemberID = M.MemberID)
AND MS.StartDate < MS.EndDate
WHERE MS.EndDate IS NOT NULL
GROUP BY MS.MemberID, MS.MemberStatusID,
MS.EndDate, MS.StartDate, M.IdentificationNumber
) MS2
ON MS1.MemberID = ms2.MemberID
AND MS1.MemberStatusID = MS2.MemberStatusID
ORDER BY MS1.memberid
このクエリを使用して、いくつかのシナリオを正常に排除しましたが、最後のシナリオを除外することはまだできません。この問題は、次のデータに示されています。このテーブルの小さなサブセットでは、MemberID = 3 が正しいです (StatusID に関連する開始日と終了日に注意してください)。メンバー ID 452311 は、開始日と終了日の順序が StatusID と比較して間違っているため、正しくありません。最終的に、memberid = 453291 のレコードのタイプのみを検索するクエリを作成しようとしています。452311 レコードを削除する方法が見つかりません。
MemberID MemberStatusID StartDate EndDate
3 2 2011-07-18 15:49:30.000 2013-04-09 10:08:51.877
3 226157 2013-04-09 10:08:51.877 NULL
453291 165079 2012-10-22 11:02:20.843 2012-12-18 09:25:26.150
453291 175401 2012-12-18 09:25:21.150 2013-01-28 12:30:49.460
453291 194582 2013-01-28 12:30:44.460 2013-03-12 09:02:53.723
453291 210649 2013-03-12 09:02:49.723 2013-04-01 15:41:10.783
453291 253471 2013-04-01 15:41:08.783 2013-05-01 15:25:30.330
453291 261919 2013-04-01 11:03:51.733 2013-04-01 11:03:52.733
452311 165101 2012-10-22 11:02:20.843 NULL
452311 194643 2013-01-29 08:36:15.560 2013-01-29 11:45:47.333
452311 194813 2013-01-29 11:45:46.333 2013-05-01 15:25:30.330