我在查询时遇到了一些问题,无法从我的表中选择正确的数据。我试图在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相关的开始日期和结束日期)。 MemberID 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
答案 0 :(得分:0)
试
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
AND MS2.EndDate IS NOT NULL
ORDER BY MS1.memberid
答案 1 :(得分:0)
是否要添加(在ORDER BY之前):
WHERE NOT (MS1.EndDate IS NULL AND EXISTS
(SELECT 1
FROM Status MS3
WHERE MS3.MemberID = MS1.MemeberID
AND MS3.MemberStatusID = MS1.MemberStatusID
AND MS3.StartDate > MS1.StartDate
)
)