ヌルであっても、前の行からデータを取得しなければならない:SQLのLAG機能JOIN - データは、私は3つのテーブル持っ
1)Calendar
- このテーブルには、各日付の単一のエントリを有している(これは毎日レコードを持つ大きなテーブルの実際の一部 - 私はこのような状況のために簡略化しています)
2)Reading_Type
Reading_Type_ID
Type_Name
3)Readings
Reading_ID
Reading_Type_ID
Reading_Date
Reading
Reading_Type_ID
とReading_Date
には1つのエントリしか許可されていませんが、すべての日付に読み取り値があります。
からすべてのデータと昨日の読んだそれのReading_Type_ID
を返すクエリが必要です。前日(昨日)は読書を持っていない場合は、Yesterday_Reading
は0でなければならない
(その行が> 1日前である場合、それはだけテーブル内の前の行からの読み出しを引っ張らないべきです)。私がこれまで持って何
:
SELECT
r.Reading_ID
, r.Reading_Type_ID
, r.Reading
, r.Reading_Date
, LAG(r.Reading, 1, 0)
OVER (PARTITION BY r.Reading_Type_ID ORDER BY r.Reading_Date)
AS Yesterday_Reading
FROM
Calendar c
LEFT JOIN
Readings r ON c.Date = r.Reading_Date
このLAG機能はありません厳密に「昨日」から、Readings
テーブルに(日付別)最後の行から引きます。私はいくつかの順列(ORDER BY c.Date
、c
からSELECT
節までの行を追加しました)を試しましたが、これを修正する方法はわかりません。
を最初に予想される行数が1000以上でない場合は、このrequirement.Throwにいくつかのサンプルdata.Iは再帰CTEが最良の答えだと思うカレンダーテーブルの必要はありません – KumarHarsh