SQL查询分钟(y)的最大值(Y)和X在一组由

问题描述:

我有一个很简单的表称为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

假设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。