SQL -2つのフィールドが変化する間の最大時間と最小時間
質問
2つの列を備えたPL/SQLテーブルがあります。 log_date
(日付)と value
(浮く)。データは非常に細かく、違いがあります log_dates
数ミリ秒になる可能性があります。 value
時間の経過とともに変化します。 SQLを使用して、間に最大時間と最小時間を見つけたい log_date
Sが必要です value
を増やす。
編集:例
log_date | value
-------------------
15:00 | 10
15:01 | 10
15:02 | 11
15:03 | 11
15:04 | 11
15:05 | 11
15:06 | 12
15:00から15:02の間 value
増加しましたが、それは15:03から15:06の間に増加しましたが、より時間がかかりました。そのため、(この場合)「3分または数字として)戻るクエリが必要です - 最長の時間取りました value
を増やす。
解決
T-SQLで答えを出すことはできますが、どの方言を使用しているのかわかりません。 TBH、ここのループは、最初に思い浮かぶものです(他の誰かがそれを行うより良い方法を持っているかもしれません!):::)
DECLARE @temp TABLE ( log_date DATETIME, value FLOAT )
INSERT INTO @temp ( log_date, value ) SELECT log_date, value FROM <MyTableName>
DECLARE @diff TABLE ( time_diff INT, old_value FLOAT, new_value FLOAT )
-- the loop
DECLARE @prev_value FLOAT,
@cur_value FLOAT,
@prev_log_date DATETIME,
@cur_log_date DATETIME
WHILE EXISTS ( SELECT NULL FROM @temp )
BEGIN
SELECT TOP 1 @cur_log_date = log_date, @cur_value = value
FROM @temp
ORDER BY log_date
IF ( @prev_value IS NOT NULL AND @prev_log_date IS NOT NULL )
BEGIN
INSERT INTO @diff ( time_diff, old_value, new_value )
SELECT DATEDIFF('ms', @prev_log_date, @cur_log_date ),
@prev_value, @cur_value
END
SELECT @prev_log_date = @cur_log_date, @prev_value = @cur_value
DELETE FROM @temp WHERE log_date = @cur_log_date
END
SELECT MAX(time_diff), MIN(time_diff) FROM @diffs
このようにして、あなたはすべての違いのテーブルになり、それをクエリすることができます。
Hth
他のヒント
このクエリを使用して、特定の値に対してMAXおよびMIN LOG_DATEを見つけることができます。しかし、このためには、値を指定する必要があります。より一般的なものにしたい場合は、クエリを少し変更する必要があるかもしれません
SELECT MAX(log_dates) AS MaxLogDate, MIN(log_dates) AS MinLogDate
FROM yourtable
WHERE <ANY condition IF needed>
GROUP
BY VALUE
HAVING VALUE = <specify VALUE>;
次のようなものを試してください:
select top 1 * from
(
select
max(log_date) - min(log_date) as duration,
value
from logdata
group by value
)
order by duration asc
他の値のためにASCをDESCに変更します。
編集]現時点では実際にこれをテストできないので、Max-Minが機能するかどうかはわかりません。これが失敗した場合、代替として他の回答の1つに投稿されたDatediff機能を使用できます。 [/編集
所属していません StackOverflow