次のクエリがあります。
SELECT * FROM
(
SELECT unix_timestamp, input_raw, tag_id
from [200030].[dbo].inputs
WHERE inputs.date_time > dateadd(day,-1,getdate())
AND
(tag_id = 92164 or tag_id = 92149)
) src
pivot
(
max(input_raw)
FOR tag_id IN ([92164], [92149])
) piv
ORDER by unix_timestamp DESC
これは素晴らしく機能します。結果は次のとおりです。
ただし、クエリでもう 1 つのことを実行してもらいたいと思います。
「NULL」結果がある場合は常に、クエリで「NULL」を列の最後の「非 NULL」値に置き換えたいと思います。
たとえば、列 '92164' に見られる最初の NULL は '211' に置き換えられます。
また、複数の 'NULL's ia 行が存在する可能性があるため、クエリは NULL 以外が見つかるまで列を上に移動し続ける必要があります。
私はphpでこれを達成することができました。結果を 2D 連想配列に入れ、NULL を検出する関数を実行し、ループして最後の非 NULL を検出しますが、可能であればこれをすべて SQL で実行したいと考えています。私はむしろ
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
//code
}
複数の配列を割り当てるよりもメソッド。
何か助けはありますか?
ありがとうございました
//編集
これは、null 値の上に非 null がある場合にのみ適用されることを追加するのを忘れていました。たとえば、最初の行が NULL の場合は許容されます。