Mysql SQL查询组上的最小(y)最大(y)和X

Mysql SQL查询组上的最小(y)最大(y)和X,mysql,sql,mysql-5.5,Mysql,Sql,Mysql 5.5,我有一个非常简单的表,名为MYTABLE: TSTAMP VARCHAR(20), VALUE VARCHAR(20) 时间戳类似于yyyy-mm-ddTHH:mm:SS.zzzZ(例如:2017-04-25T12:23:00.000Z)。 值是一个浮点数 我知道这个桌子模型很糟糕,但是很多年前就有人做过,他/她显然不知道自己在做什么 我正在尝试编写一个高效的查询,以获得最小值(VALUE)、最大值(VALUE)及其在时间间隔内的时间戳(例如:每分钟的最小值/最大值)。 我可以通过下面的查询获

我有一个非常简单的表,名为MYTABLE:

TSTAMP VARCHAR(20), VALUE VARCHAR(20)
时间戳类似于yyyy-mm-ddTHH:mm:SS.zzzZ(例如:2017-04-25T12:23:00.000Z)。 值是一个浮点数

我知道这个桌子模型很糟糕,但是很多年前就有人做过,他/她显然不知道自己在做什么

我正在尝试编写一个高效的查询,以获得最小值(VALUE)、最大值(VALUE)及其在时间间隔内的时间戳(例如:每分钟的最小值/最大值)。 我可以通过下面的查询获得最小值和最大值,但我看不到获取它们的时间戳的方法

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;
其中1493115780000是以下因素的结果:

    SELECT UNIX_TIMESTAMP('2017-04-25T12:23:00.000Z')*1000+SUBSTR('2017-04-25T12:23:00.000.000Z',-4,3);
*编辑,因为我没有正确解释 我得到的是每一次间隔: 第一个时间戳,最后一个时间戳,最小值,最大值,Interval编号,第一个时间戳

我想要的是: 最小值时间戳、最大值时间戳、最小值、最大值、间隔数


我正在使用Mysql 5.5

任何帮助都将不胜感激:) 这看起来像是一个大学教程,但现在已经离我太远了:(

假设
ABS(TRUNCATE(((UNIX_TIMESTAMP(TSTAMP)*1000+SUBSTR(TSTAMP,-4,3))-1493115780000)/20000,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

最好的解决方案是首先清理您的表,将所有内容转储到临时表中,用正确的结构重新创建表,然后使用转换进行转储。之后,您的请求将更加简单。

如果您发布错误消息,您将非常高兴getting@ElmerDantas我没有收到错误消息。只是我没有收到错误消息Milney:我不是定义这个数据模型的人(我已经抱怨了很多年了),我知道这是错误的……告诉我们关于
IsStatusGoodbadorUngular()
@ElmerDantas group by interval和TSTAMP只是选择每一行。