如何选择 DateRange 1 在 DateRange 2 Crystal 或 SQL 中?

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

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

所以基本上

Bob
住在从
1/1/2020
(搬入)到
5/30/2021
(搬出)的一个单元中,我试图找到从
1/1/2021
(开始日期)到
3/1/2022
(开始日期)期间住在该设施的所有租户结束日期)。如果租户仍住在那里,他们的
moveout
将会是
NULL

我已经尝试过将其作为范围评估、日期范围参数、SQL case 语句、各种公式,但它只是无法正确提取数字。以下是我目前的尝试。我包含了一个 SQL 标签,因为使用 Case When 语句可能有更简单的方法来做到这一点。

尝试:

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

Select Statement

RangeAnalysis = 1

MoveoutNull:
if isnull({View_Tenants.moveout}) then currentdate

(我也尝试过这个作为未来的一种方式)。

sql crystal-reports
2个回答
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”相加。


0
投票

让我们用简单的英语来分解逻辑:

MoveoutNull: if isnull({View_Tenants.moveout}) then currentdate

所以

MoveoutNull
表示搬出日期或今天的日期。

1 if ({View_Tenants.movein} <= {?Start Date} and {@MoveoutNull} >= {?Start Date}) or
2 ({View_Tenants.movein} <= {?End Date} and {@MoveoutNull} >= {?End Date}) or 
3 ({View_Tenants.movein} >= {?Start Date} and {@MoveoutNull} <= {?Start Date}) 
4 then 1 else 0
  1. 入住日期小于或等于开始日期,搬出日期或今天大于或等于开始日期。 退房

  2. 入住日期小于或等于结束日期,并且迁出日期或今天大于或等于结束日期。 退房

  3. 入住日期大于或等于开始日期,搬出日期或今天小于或等于开始日期。 这种情况在逻辑上似乎不太可能,因为我们正在检查是否有人在特定日期之后搬入,然后在同一日期之前搬出。

我认为你只需要将第 3 行中的

{@MoveoutNull} <= {?Start Date})
更改为
{@MoveoutNull} <= {?End Date})

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