これは簡単だと思いますが、わかりません。
背景情報を次に示します。
Leases と UtilityBills という 2 つのテーブルがあります。それらは、Leases テーブルの主キー (LeaseID とも呼ばれます) を参照する UtilityBills テーブルの 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
私が理解できないのは、これら 2 つのステートメントを組み合わせて、すべてのリースについて 2 番目に新しい検針日と最新の検針日をリストするクエリを生成する方法です。私が知る限り、この状況では CROSS APPLY を使用する必要がありますが、動作させることができません。ありがとう!