我有一个表结构,简化如下:
period_id int
suite_id varchar(20)
suite_status varchar(50)
每个月都分配给一个期间 ID。每个套件都有每个月的记录 (period_id)。套房状态可以是“空置”或“有效租约”。我正在尝试编写一个查询,显示自 2011 年 7 月 1 日以来已租用的前五项交易,这些交易在成为有效租约之前空置时间最长,但我不知道如何处理这个问题。
我最初的方法是按每个租约的空置期数对每个租约进行排名,如下所示:
;WITH cte_vacancy_periods AS
(
SELECT lp.suite_id ,
count(lp.period_id) AS 'Periods Vacant'
FROM property.lease_period lp
WHERE lp.suite_status = 'Vacant'
OR
( isnull(lp.suite_status, '') = ''
AND lp.lease_id = 'No Lease' )
GROUP BY
lp.suite_id
ORDER BY count(lp.period_id) desc
)
然后,我计划将其与自 258 年(2011 年 7 月 1 日)以来生效的租约进行交叉引用。
不幸的是,这不适用于租约空置两个月,然后租用一个月,然后再空置两个月的情况(显示总共空置四个月,而实际上应该是两个月)。
我敢肯定这可以通过分区来完成,但我试图做到这一点并不太了解它们。我在解决这个问题时缺少什么知识?如果我对数据的解释很差,所以很难理解我在做什么,请告诉我,我会在可能的地方详细说明。