我认为这应该很容易,但我无法弄清楚。SQL Server:在单个查询中结合最大结果和第二大结果
下面是一些背景资料:
我有两个表,称为租赁和UtilityBills。他们通过名为LeaseID的外键连接在UtilityBills表中,该表引用了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,但无法使其工作。谢谢!
这将返回两个单独的行而不是一行 –
@rs:他说他需要他们在两列? – Kaf
从他的问题,我认为他希望在一行OP表示 - “如何结合这两个语句产生一个查询,列出所有租约第二最近和最近的抄表日期。”# –