2010-11-11 73 views
1

我有兩列的PL/SQL表:log_date(DATE)和value(FLOAT)。數據非常細密,log_dates之間的差異可能會有幾毫秒。 value隨時間變化。我想找到,使用SQL,最大和log_date的IT花費value增加之間的最短時間。SQL - 最大和最小兩個領域之間的時間改變

編輯:例

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花費的最長時間。

+0

你可以發佈樣本數據和預期的輸出樣本?我不確定我完全理解這個問題。 – 2010-11-11 09:24:45

回答

0

我可以給你在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

-1

您可以使用此查詢來查找特定值的最大和最小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>; 
+0

總是推遲downvote。而且,在我回答後,我怎麼知道這個問題是經過編輯的。非常想要幫助! – pavanred 2010-11-11 09:51:31

+0

不要個人承擔 - 以上不回答我問的問題,就這些。 – Peter 2010-11-11 10:17:14

+0

這是很酷的人。一旦我找到時間,將編輯我的答案以適合您的問題。 – pavanred 2010-11-11 10:25:25

0

嘗試類似如下:

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是否可以工作,你可以使用其他答案中發佈的datediff函數作爲替代if這失敗了。 [/編輯]

相關問題