2017-04-26 73 views
0

我有一個很簡單的表稱爲MYTABLE:SQL查詢分鐘(y)的最大值(Y)和X在一組由

TSTAMP VARCHAR(20), VALUE VARCHAR(20) 

時間戳是像YYYY-MM-DDTHH:MM:SS.zzzZ (例如:2017-04-25T12:23:00.000Z)。 價值是一個浮動。

我知道這個表模型很糟糕,但是很多年前由其他人明顯不知道他/她在做什麼的時候已經完成了。我試圖寫一個有效的查詢來獲取最小值(VALUE),最大值(VALUE)和時間間隔(例如:每分鐘的最小值/最大值)的TIMESTAMP。 我能夠通過以下查詢獲取最小值和最大值,但我無法看到獲取其時間戳的方法。

SELECT MIN(tstamp) 
    , MAX(tstamp) 
    , MIN(value) minVal 
    , MAX(value) max 
    , ABS(TRUNCATE(((UNIX_TIMESTAMP(tstamp)*1000+SUBSTR(tstamp,-4,3)) - 1493115780000)/20000,0)) intervalNumber 
    , tstamp 
    FROM mytable 
WHERE tstamp BETWEEN '2017-04-25T12:23:00.000Z' AND '2017-04-25T12:24:00.000Z' 
    AND NOT tstamp = '2017-04-25T12:24:00.000Z' 
GROUP 
    BY intervalNumber; 

WHERE 1493115780000的結果是:

SELECT UNIX_TIMESTAMP('2017-04-25T12:23:00.000Z')*1000+SUBSTR('2017-04-25T12:23:00.000.000Z',-4,3); 

*編輯,因爲我沒有正確地解釋 我所得到的是每個區間: 第一時間戳,lasttimestamp,最小值,MAXVALUE ,內部數字,第一次時間戳

我想要的是: 最小值時間戳,最大值時間戳,最小值,最大值,間隔al號


我正在使用Mysql 5.5。

任何幫助,將不勝感激:) 它看起來像一個大學教程,但現在這是太落後了我:(

+1

這將是很好,如果你張貼錯誤信息你得到 –

+0

@ElmerDantas我沒有得到錯誤信息。這只是我無法弄清楚如何獲得最小值和最大值的時間戳。 – Marc

+1

@Milney:我不是誰定義的數據模型這一個(我一直在抱怨它多年....)我知道這是錯誤的... – Marc

回答

0

假設ABS(TRUNCATE(((UNIX_TIMESTAMP(TSTAMP)*1000+SUBSTR(TSTAMP,-4,3)) - 1493115780000)/20000,0)) as intervalNumber是正確的。

我認爲你正在尋找的東西像:

-- Min value 
SELECT top 1 min(TSTAMP), VALUE, 
    ABS(TRUNCATE(((UNIX_TIMESTAMP(TSTAMP)*1000+SUBSTR(TSTAMP,-4,3)) - 1493115780000)/20000,0)) as intervalNumber 
FROM MYTABLE 
WHERE TSTAMP between '2017-04-25T12:23:00.000Z' AND '2017-04-25T12:24:00.000Z' 
    AND NOT TSTAMP='2017-04-25T12:24:00.000Z' 
GROUP BY VALUE desc 

-- Max value 
SELECT top 1 max(TSTAMP), VALUE, 
    ABS(TRUNCATE(((UNIX_TIMESTAMP(TSTAMP)*1000+SUBSTR(TSTAMP,-4,3)) - 1493115780000)/20000,0)) as intervalNumber 
FROM MYTABLE 
WHERE TSTAMP between '2017-04-25T12:23:00.000Z' AND '2017-04-25T12:24:00.000Z' 
    AND NOT TSTAMP='2017-04-25T12:24:00.000Z' 
GROUP BY VALUE asc 

最好的解決辦法是由所有的臨時表傾銷清潔擺在首位你的表,重新創建具有正確結構表和轉儲回來轉換您的要求。須後simplier。