当存在多行具有相同描述但不同日期的数据时,将数据取出

问题描述 投票:0回答:1

我需要在下个月到期的地方提取数据。尽管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,则需要忽略它们。

我希望这有道理

sql matching
1个回答
0
投票

因此,在同事的帮助下,我们设法使用了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())) 
© www.soinside.com 2019 - 2024. All rights reserved.