MySql:尝试从查询中删除硬编码的值

时间:2019-05-09 17:06:45

标签: mysql

数据集:

创建语句:

创建表table1TimeOfDay DATETIME(3), SrlNum FLOAT(5), Curr FLOAT(5), Volt FLOAT(5), 主键(TimeOfDaySrlNum) ) Image 这就是我想要的值,其中电流在电流减小之前就接近于零,并且每个组都具有相应的电压值,而不必对其进行硬编码,即无需指定包装和执行结合。我要一个查询来做。

我尝试了联接,但是对于我的数据集来说效率很低。

SrlNum 241 242 .. 249

Curr 0 0 0 0 ... -1000 .. 0。 0。 -200 ...

对应的伏特400400400400..320310290..400。 0. 0。 380

需要在电流变为-1000之前找到每个组的电压。 我正在尝试获取curr = 0的时间戳记,直到它变为-1000。 我可以通过对每个SrlNum进行硬编码来做到这一点,但是不能通过一个查询对所有组进行硬编码,因此我想删除硬编码。

我想使用MySql查询为表中每个组的特定时间戳显示x,y,z字段。

我的子查询返回每个组的最小时间戳,但是在此之前我需要显示30个时间戳的值,这意味着我必须进行偏移,但是由于我的子查询返回多个值,因此时间戳'<'子查询显然不起作用。 / p>

我需要找到解决此问题的方法。

所以下面的查询给出了我想要的结果,但是我目前不得不通过提及SrlNum对其进行硬编码。

我希望查询能够显示所有偏移值而不必对SrlNum进行硬编码,因为组将不断增加,并且我希望查询显示自动更新。

我尝试使用Joins,但是我的数据集是如此庞大,以至于self joins太简单了,运行起来太费时间。我已经尝试过重组查询,但是没有返回我想要的内容。

我也尝试了变量和超前及滞后函数,但这些函数与我的MySql版本不兼容。

最近,我尝试使用

(select max(TimeOfDay) as ToD1, Volt as 'V1', SrlNum from(


(select TimeOfDay, Curr, Volt, SrlNUM from table where TimeOfDay < (select min(TimeOfDay) from table where Curr<-1234 and SrlNum=243) order by TimeOfDay desc Limit 1 Offset 31)

union

(select TimeOfDay, Curr, Volt, SrlNUM from table where TimeOfDay < (select min(TimeOfDay) from table where Curr<-1234 and SrlNum=244) order by TimeOfDay desc Limit 1 Offset 31)
union

(select TimeOfDay, Curr, Volt, SrlNUM from table where TimeOfDay < (select min(TimeOfDay) from table where Curr<-1234 and SrlNum=245) order by TimeOfDay desc Limit 1 Offset 31)

union

(select TimeOfDay, Curr, Volt, SrlNUM from table where TimeOfDay < (select min(TimeOfDay) from table where Curr<-1234 and SrlNum=246) order by TimeOfDay desc Limit 1 Offset 31)

union
.
.
.
 )as a group by BMU_Debug_pack_SrlNum) as c

0 个答案:

没有答案