2017-04-26 5 views
0

でグループを超える最大(y)とX:SQLクエリ分(y)は、私は非常に単純なテーブルと呼ばれるMYTABLEを持って

TSTAMP VARCHAR(20), VALUE VARCHAR(20) 

タイムスタンプはYYYY-MM-DDTHHのようなものです:MM:SS.zzzZ (例:2017-04-25T12:23:00.000Z)。 値は浮動小数点数です。

私はこのテーブルモデルがちょっと悪いことを知っていますが、何年も前に彼/彼女が何をしているのか分かりませんでした。

min(VALUE)、max(VALUE)、およびそれらのTIMESTAMPを時間間隔(例:分/分)で取得する効率的なクエリを作成しようとしています。 次のクエリで最小値と最大値を取得できましたが、タイムスタンプを取得する方法がわかりません。

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

* EDIT私が正しく 何私が取得する各間隔のためであると説明されなかったので: 最初のタイムスタンプ、lasttimestamp、最小値、MAXVALUE 1493115780000は結果をある

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; 

、暗証番号、最初のタイムスタンプ

私が望むもの: 最小値のタイムスタンプ、最大値のタイムスタンプ、最小値、最大値、中間値アル番号


私はMysql 5.5を使用しています。

任意の助けをいただければ幸いです:) それは、大学のチュートリアルのように見えますが、これはあまりにも遠くに私の後ろに今ある:(ABS(TRUNCATE(((UNIX_TIMESTAMP(TSTAMP)*1000+SUBSTR(TSTAMP,-4,3)) - 1493115780000)/20000,0)) as intervalNumberが正しいと仮定すると、

+1

エラーメッセージが表示されたら、それはいいです –

+0

@ElmerDantasエラーメッセージが表示されません。ただ、私は最小値と最大値のタイムスタンプを取得する方法を理解することができません。 – Marc

+1

@Milney:私はこのデータモデルを定義した人ではありません(私は何年もそれに不平を言っています....)私はそれが間違っていることを知っています... – Marc

答えて

0

私はあなたが何かを探していると思います

-- 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 

最善の解決策は、一時テーブル内のすべてをダンプすることで、最初の場所であなたのテーブルをきれいに正しい構造を持つテーブルを再作成し、変換して戻ってダンプすることですあなたの要求:ような。それ以降は簡単になるはずです。

関連する問題