我认为这应该很容易,但我无法弄清楚。
以下是一些背景信息:
我有两张表,分别称为 Leases 和 UtilityBills。它们通过 UtilityBills 表中称为 LeaseID 的外键连接,该外键引用 Leases 表中的主键(也称为 LeaseID)。
所以这很简单——我正在为许多租约中的每一个记录每月的电表读数。
在 UtilityBills 表中,我有一个名为 MeterReadingDate 的字段,用于存储每次抄表的日期。
这是我的问题:
我如何创建一个查询,为每个租约提供最近一次抄表的日期和上次抄表的日期?
使用以下 sql 语句,我可以很容易地获得每个租约的最新仪表读数:
SELECT LeaseID, MAX(MeterReadingDate) AS MostRecentMeterReadingDate
FROM dbo.UtilityBills
GROUP BY LeaseID
我还可以使用此 sql 语句获取任何给定租约的先前抄表(例如,这为我提供了 LeaseID=228 的租约的先前抄表):
SELECT TOP 1 MeterReadingDate, LeaseID
FROM (SELECT TOP 2 MeterReadingDate, LeaseID
FROM dbo.UtilityBills
WHERE (LeaseID = 228)
ORDER BY MeterReadingDate DESC) DERIVEDTBL
ORDER BY MeterReadingDate
我想不通的是,如何结合这两个语句来生成一个查询,列出所有租约的第二最近和最近的抄表日期。据我所知,在这种情况下我需要使用 CROSS APPLY,但无法让它工作。谢谢!