如果日期范围 1 在日期范围 2 内

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

在 Crystal 中,我试图根据他们是否在指定日期范围内居住在住房中来选择一个人(并进一步将他们纳入计数,但我已经处理了这部分)。

所以基本上鲍勃从 2020 年 1 月 1 日(搬入)到 2021 年 5 月 30 日(搬出)住在一个单元中,我试图找到从 2021 年 1 月 1 日(开始日期)到 2021 年 1 月 1 日(开始日期)住在该设施的所有租户。 2022 年 3 月 1 日(结束日期)。如果租户仍住在那里,他们的搬迁将为 NULL。

我已经尝试过将其作为范围评估、日期范围参数、sql case 语句、各种公式,但它只是无法正确提取数字。以下是我目前的尝试。

公式 if ({View_Tenants.movein} <= {?Start Date} and {@MoveoutNull} >= {?开始日期}) 或者 ({View_Tenants.movein} <= {?End Date} and {@MoveoutNull} >= {?结束日期}) 或者 ({View_Tenants.movein} >= {?开始日期} 和 {@MoveoutNull} <= {?Start Date}) then 1 else 0

选择声明

范围分析 = 1

移出空: if isnull({View_Tenants.moveout}) then currentdate (也尝试过将此作为未来日期的一种方式)。

sql crystal-reports
1个回答
0
投票

SQL Crystal 日期范围问题

我们必须弄清楚在我们感兴趣的时间内是否有任何租户在该设施周围闲逛。让我们对此进行分析:

  1. 首先,有些人在我们的开始日期之前已经在设施中,直到我们的截止日期之后才离开。这些人在整个相关时间内都在场。
  2. 还有一些租户在开始日期之前已经在该设施中,但他们决定在结束日期之前的日期范围内离开。
  3. 最后,我们需要捕获在该日期范围内搬迁的租户。他们是否仍然在那里,或者他们稍后离开但在我们的日期范围内,都没关系。

我们基本上是在指定的时间范围内检查任何时候在设施内的任何人。

鉴于这些情况,您的情况将变为:

  1. {View_Tenants.movein} <= {?Start Date} and {@MoveoutNull} >= {?End Date}
  2. {View_Tenants.movein} <= {?Start Date} and {@MoveoutNull} between {?Start Date} and {?End Date}
  3. {View_Tenants.movein} between {?Start Date} and {?End Date}

如果结合场景,公式会是什么样子的示例。

脚本:

if 
    ({View_Tenants.movein} <= {?Start Date} and {@MoveoutNull} >= {?End Date}) or 
    ({View_Tenants.movein} <= {?Start Date} and {@MoveoutNull} between {?Start Date} and {?End Date}) or 
    ({View_Tenants.movein} between {?Start Date} and {?End Date}) 
then 
    1 
else 
    0

您的

MoveoutNull
公式已正确设置,可将空的迁出日期替换为当前日期。

最终声明:

RangeAnalysis = 1

请记住,在此过程中,在给定时间范围内居住在该设施的个人被标记为“1”,而未居住在该设施的个人则被标记为“0”。最终计数只是将所有“1”相加。

© www.soinside.com 2019 - 2024. All rights reserved.