0

SQL にデータを保存するスマート測定デバイスがいくつかあります。これらのデバイスは 1 日に 1 回データを記録するため、最新のデータを取得して前日のデータと比較できる必要があります。デバイスはダイヤル付きのカウンターです。現在のダイヤル読みとダイヤル読みの日付を SQL に格納します。条件は、現在のダイヤルの読み取り値を取得し、前日のダイヤル読み取り値が現在の日付よりも大きいかどうかを確認します (たとえば、6/13/13 のダイヤル読み取り値は 6/10/13 未満です)。問題は、ダイヤルの読み取り値が「CURRENT_TIMESTAMP」未満の時間の SQL ルックバックを作成し、そのデータを表示する方法がわからないことです。

テーブル構造は次のとおりです。

-------------------------------------    
DeviceNo| RecordingDate| DialReading|
-------------------------------------     
1234    | 6/10/13      | 504
-------------------------------------
1232    | 6/10/13      | 8899   
4

1 に答える 1

0

これを使用してみてください。うまくいかない場合はお知らせください。CTE のエイリアスを CTE の外部で使用できるかどうかを思い出せません。エイリアスが問題を引き起こす可能性がある場合は、名前を変更します。

--cte selects readings information based on current database system timestamp
WITH cte AS(
SELECT d.DeviceNo, r.RecordingDate, r.DialReading
FROM Devices d
inner join Modules m  on d.DeviceID = m.DeviceID
inner join Recordings r on m.ModuleID = r.ModuleID
WHERE  r.RecordingDate = CURRENT_TIMESTAMP)

--selects everything where the device numbers match cte's result set
--where the dial reading is higher than todays
--and finally where the recordingDate is less than the
--current database system timestamp

SELECT d.DeviceNo, r.RecordingDate, r.DialReading
FROM Devices d
inner join Modules m  on d.DeviceID = m.DeviceID
inner join Recordings r on m.ModuleID = r.ModuleID
WHERE cte.DeviceNo = d.DeviceNo
AND r.DialReading > cte.DialReading
AND r.RecordingDate < CURRENT_TIMESTAMP
于 2013-06-13T14:59:49.793 に答える