我需要在下个月到期的地方提取数据。尽管end_date可能在此范围内,但person_code的另一行具有相同的需求描述,但为将来的日期。我需要一种方法来查看将来的日期。需求是统一的,所以会匹配的。
我可以列出需要在一个月内到期的人员列表,但是通常他们的ID上还有一行,该行的未来日期也可以满足相同的需求,因此不必在列表中。
select
eln.person_code,
eln.END_DATE,
Case when eln.NEED_TYPE_DESCRIPTION = 'Other' then eln.NEED_DESCRIPTION
Else eln.NEED_TYPE_DESCRIPTION
End As 'Access Requirement'
from EBS_LEARNER_NEEDS eln
JOIN EBS_LEARNER_NEEDS eln2
on eln.PERSON_CODE = eln2.PERSON_CODE
and eln.NEED_TYPE_DESCRIPTION = eln2.NEED_TYPE_DESCRIPTION
and eln.END_DATE < eln2.END_DATE
where eln.END_DATE between getdate() and (dateadd(M,+1, Getdate()))
order by eln.end_date desc
我需要结果是要根据未来的行日期而不是具有较早日期的人列出需要过期的人员。
会有这样的一行Image of table
我正在尝试提取下个月具有结束日期的记录,但是如果它们已经具有带有将来日期的新行并且匹配person_code和Access Requirement,则需要忽略它们。
我希望这有道理
因此,在同事的帮助下,我们设法使用了hading子句来解决这个问题。
select
eln.person_code,
ISNULL(p.forename,'') + ' ' + ISNULL(p.surname,'') as 'Student',
eln.End_date,
Case when eln.NEED_TYPE_DESCRIPTION = 'Other' then eln.NEED_DESCRIPTION
Else eln.NEED_TYPE_DESCRIPTION
End As 'Access Requirement'
from EBS_LEARNER_NEEDS eln
JOIN PEOPLE p on p.PERSON_CODE = eln.PERSON_CODE
Group by eln.person_code,
ISNULL(p.forename,'') + ' ' + ISNULL(p.surname,''),
Case when eln.NEED_TYPE_DESCRIPTION = 'Other' then eln.NEED_DESCRIPTION
Else eln.NEED_TYPE_DESCRIPTION
End, eln.END_DATE
Having Max (eln.END_DATE) between getdate() and (dateadd(M,+1, Getdate()))