我目前有一个跟踪库存项目的系统。
sql表的设置如下:
Unique ID | Order number | Location | TimeStamp
每当一个订单为moves
时,就会创建一个与new location
和timestamp
具有相同订单号的新条目。
现在我需要找到从一个位置移动到另一个位置所需的平均时间,例如从位置Warehouse
移动到Pickup Depot
。
我正在尝试对查询工作,我有这个到目前为止。
SELECT
IFNULL(TIMESTAMPDIFF(SECOND,
MIN(TimeStamp),
MAX(TimeStamp)) / NULLIF(COUNT(*) - 1, 0), 0)
FROM TableName
WHERE Status = 'Delivered'
AND TimeStamp > DATE_SUB(NOW(), INTERVAL 6 HOUR)
如果表只有一个订单号,则工作得很好,当我们添加更多的表号时,average
就会响起。
我需要它只查看每个订单号的时间戳差异,而目前我认为它正在查看整个表。
任何帮助都将非常感激。
为这个问题发了两次道歉,之前的帖子没有包含足够的信息。
再次感谢。
SELECT
IFNULL(TIMESTAMPDIFF(SECOND,
MIN(TimeStamp),
MAX(TimeStamp)) / NULLIF(COUNT(*) - 1, 0), 0)
FROM TableName
WHERE Status = 'Delivered'
AND TimeStamp > DATE_SUB(NOW(), INTERVAL 6 HOUR)
GROUP BY OrderNumber
上面的查询返回sql中不同行的时间差(带有以下错误"当前选择不包含唯一列")。网格编辑、复选框、编辑、复制和删除功能不可用。该表有一个名为"IFNULL(TIMESTAMPDIFF(SECOND, MIN(TimeStamp), MAX(TimeStamp))/NULLIF(COUNT(*) - 1,0), 0)"的列,其中包含按行排列的不同顺序的时间差。现在我试着用输出代码得到它们的平均值。
我用下面的代码输出结果:$row_cnt = $result2->num_rows;
while ($row2 = mysqli_fetch_assoc($result2)) {
$processingseconds = $row2['IFNULL(TIMESTAMPDIFF(SECOND, MIN(TimeStamp), MAX(TimeStamp)) / NULLIF(COUNT(*) - 1, 0), 0)'] + $processingseconds;
}
print "Current Processing Time: ";
$processingseconds = $processingseconds/$row_cnt;
$processingminutes = $processingseconds/60;
echo $processingminutes;
尝试在查询中添加Group by condition。
GROUP BY Order_Number_column
像这样:
SELECT
IFNULL(TIMESTAMPDIFF(SECOND,
MIN(TimeStamp),
MAX(TimeStamp)) / NULLIF(COUNT(*) - 1, 0), 0)
FROM TableName
WHERE Status = 'Delivered'
AND TimeStamp > DATE_SUB(NOW(), INTERVAL 6 HOUR)
GROUP BY Your_Order_Number_column