有一个名为 Tbl
的临时表,它是根据查询创建的(可能与知道无关)在任何特定日期运行,但通常只是当前日期(CURDATE()
),其中 始终只有两个BatNum
(批号)记录 ,其中最早的TimeStr
将是开始时间和最新TimeStr
将是每个BatNum
的结束时间。
这些是我们开始的记录,所以这里没有问题,但这是我们从其他表中获得的所有内容。虽然在我提供的这个小例子中有三组不同的BatNum
记录(1,2,3),但可能只有1或最多可能有30个。
Tbl表
Tbl Explained
我在这里使用Weight
表中的一小部分数据样本创建SQL Fiddle,我在原始SQL 中添加了一些更大的数据样本部分也是以防万一。
这些只是按照特定范围记录的Weights
表格中的数据样本缩小,但对于给定的批次(即每个BatNum
组,它可能是50,000,25,000等) )。
我把这个逻辑放到一个存储过程中,如果这对于 MySQL 来说是重要的。
Tbl
表中为每个TimeStr
分组(总是两个)的两个BatNum
值记录中的每一个进行尝试,使用它们来获取记录从Weight
表中,然后将所有数据(每个分组)与各种函数等聚合在一起,以获得所需的任何记录。 我的想法(呃噢...... spaghettios)
我不确定是否可以动态创建@StartTime
和@EndTime
变量,并从每个BatNum
组TimeStr
值中迭代其值然后在MySQL中使用另一个查询等。
WHERE TimeStr BETWEEN @StartTime AND @EndTime
)和每个BatNum
组(例如三个)运行查询)将每个查询中的@StartTime
和@EndTime
值设置为每个TimeStr
组的BatNum
值 - 但我可以使用MIN(TimeStr)
,{{1或者可能MAX(TimeStr)
知道哪个是开始,哪个是相应的结束。为了给您一个想法,一个示例来自ORDER BY TimeStr [ASC/DESC] LIMIT 1
的每个BatNum
组的迭代值是:
来自BatNum = 1条记录(迭代1)
Tbl
SET @StartTime = '2017-12-14 06:12:31';
SET @EndTime = '2017-12-14 07:45:55';
来自BatNum = 2条记录(迭代2)
SET @val = 15;
SET @StartTime = '2017-12-14 07:45:56';
SET @EndTime = '2017-12-14 12:15:51';
来自BatNum = 3条记录(迭代3)
SET @val = 12;
SET @StartTime = '2017-12-14 12:15:52';
SET @EndTime = '2017-12-14 16:20:58';
最后,我可能需要使用类似的东西:
SET @val = 15;
我只是不确定如何最好地处理SELECT @Val oz
, COUNT(Value) count
, AVG(Value) average
, STDDEV(Value) stddev
FROM Weights
WHERE TimeStr BETWEEN @StartTime AND @EndTime;
表中每个BatNum
组的记录的迭代,所以我想我会寻求帮助。
不要忘记:
Tbl
答案 0 :(得分:1)
我认为您不需要存储过程,但您需要一个(或多个)视图或临时表,其中批量编号和重量(oz)与权重表中的权重相关联。完成后,您可以从该视图创建任何类型的聚合值。
以下是为您提供临时表的查询。
SELECT p.`Value`, q.BatNum, q.Value oz
FROM `weights` p
LEFT JOIN
(SELECT a.BatNum BatNum, a.TimeStr sTime, b.TimeStr eTime, a.value Value
FROM Tbl a
LEFT JOIN Tbl b ON (a.BatNum = b.BatNum)
WHERE a.TimeStr < b.TimeStr) q
ON (p.`TimeStr` BETWEEN q.sTime and q.eTime)
这应该为您提供如下输出:
Value BatNum oz
431 1 15
431.2 1 15
...
....
352.8 2 12
352.4 2 12
......
.....
427.3 3 15
427.1 3 15
.....
.....
从上面的表格或视图中,您可以创建最终查询,例如
SELECT oz, count(value), avg(value)
FROM createdView
GROUP BY BatNum
如果您使用的是mysql,那么创建视图比直接从此处复制查询需要更多的努力。在从大数据生成更快结果的情况下,您可能还需要优化查询。