2

SQL2012で実行する次のT-SQLがあります

SELECT machine_id, speed_gps_kph, odometer_total, event_timestamp, 
   1.0 * (speed_gps_kph - LAG(speed_gps_kph, 1) OVER (PARTITION BY machine_id ORDER BY event_timestamp)) /
   datediff(ss, LAG(event_timestamp, 1) OVER (PARTITION BY machine_id ORDER BY event_timestamp), event_timestamp)
FROM   Simple_speed

ただし、エラーが示すように、ゼロ除算に問題があります。

この問題についてはかなりの数の投稿と回答がありますが、私はそれを機能させるのに苦労しています。

4

1 に答える 1

1

を使用して、自分自身を繰り返すことなく、ゼロ除算エラーを制御する簡単な方法を次に示しますNULLIF(...,0)

SELECT machine_id, speed_gps_kph, odometer_total, event_timestamp, 
   1.0 * (speed_gps_kph - LAG(speed_gps_kph, 1) OVER (PARTITION BY machine_id ORDER BY event_timestamp)) 
   / NULLIF(datediff(ss, LAG(event_timestamp, 1) OVER (PARTITION BY machine_id ORDER BY event_timestamp), event_timestamp),0)
FROM Simple_speed

NULL式は、分母がゼロの行に対して返されるようになりました。

于 2012-12-10T00:38:07.627 に答える