Sql 计算字段后返回的值不正确
运行后,返回的结果是:Sql 计算字段后返回的值不正确,sql,calculated-columns,calculated-field,sql-calc-found-rows,Sql,Calculated Columns,Calculated Field,Sql Calc Found Rows,运行后,返回的结果是: SELECT t3.id, t3.prod_ID, MIN(diff) AS min_time FROM (SELECT t1.id, (UNIX_TIMESTAMP(t2.time_stamp_2) - UNIX_TIMESTAMP(t1.time_stamp)) AS diff FROM production t1 LEFT JOIN pro
SELECT
t3.id,
t3.prod_ID,
MIN(diff) AS min_time
FROM
(SELECT
t1.id,
(UNIX_TIMESTAMP(t2.time_stamp_2) - UNIX_TIMESTAMP(t1.time_stamp)) AS diff
FROM
production t1
LEFT JOIN
process t2 ON t1.id = t2.id
HAVING
diff >= 0) tx
LEFT JOIN
production t3 ON t3.id = tx.id
GROUP BY
t3.id
id prod_ID min_time
1 9 1200
它应该返回的是
id prod_ID min_time
-----------------------
1 2 1200
我最初认为在连接中有一个错误,经过多次连接测试,相同的错误结果
SQLFiddle_2澄清我使用Group By是因为我有多个ID
SQLFiddle_3以进行更多扩展
在SQLFiddle_3上运行后,返回的结果是:
SELECT
t3.id,
t3.prod_ID,
MIN(diff) AS min_time
FROM
(SELECT
t1.id,
(UNIX_TIMESTAMP(t2.time_stamp_2) - UNIX_TIMESTAMP(t1.time_stamp)) AS diff
FROM
production t1
LEFT JOIN
process t2 ON t1.id = t2.id
HAVING
diff >= 0) tx
LEFT JOIN
production t3 ON t3.id = tx.id
GROUP BY
t3.id
id prod_ID min_time
1 9 1200
它应该是什么
id prod_ID min_time
-----------------------
1 2 1200
2 2 960
3 2 360
您的查询确实是非常错误的,您的内部查询本质上是在列出时间差,但随后您放弃了所有这些好的工作,并且不在prod_id上加入或分组,所以它本质上只是拾取您插入到数据库中的第一个值。如果切换插入数据的顺序,以便先插入产品id,则会得到所需的结果,但原因错误 您的内部查询是这样做的:
id prod_ID min_time
-----------------------
1 9 1200
2 2 960
3 3 360
如果运行该选项,您将看到所需的值:
SELECT
t1.id,
t1.prod_id,
(UNIX_TIMESTAMP(t2.time_stamp_2)-UNIX_TIMESTAMP(t1.time_stamp)) as diff
FROM production t1
left JOIN process t2
ON t1.id = t2.id
WHERE (UNIX_TIMESTAMP(t2.time_stamp_2)-UNIX_TIMESTAMP(t1.time_stamp)) > 0
…但您的外部查询对此没有任何作用
有很多方法可以做到这一点,这里有一个简单的方法:
id prod_id diff
1 2 1800
1 3 1380
1 9 1200
在查询中,您只按t3.id对
进行分组,而不在t3.prod\u id上进行聚合,因此返回的值未定义。
我相信您不需要按分组,甚至不需要重新加入制作
试试这个:
SELECT
t1.id,
t1.prod_id,
(UNIX_TIMESTAMP(t2.time_stamp_2)-UNIX_TIMESTAMP(t1.time_stamp)) as diff
FROM production t1
left JOIN process t2
ON t1.id = t2.id
WHERE (UNIX_TIMESTAMP(t2.time_stamp_2)-UNIX_TIMESTAMP(t1.time_stamp)) > 0
ORDER BY 3
LIMIT 1
请参阅。
结果:
嗨,汉塞尔先生。我编辑了我的问题,我不能使用限制,因为(在这种情况下)有多个IDGood insight Hansell先生,但我还需要计算字段中>0“filter”后的MIN。抱歉@forpas,为了澄清,我编辑了我的问题。我不能使用限制,因为/万一有多个ID@silver_river你的MySql版本是什么?对不起,我是一个初学者,MySql 5.6我还需要从计算字段中“过滤”出负值后找到最小值。对不起,一个问题。我不知道我可以在这个和(t1.id,t1.prod\u id)
中使用两列,我想只能使用这样一列和(t1.id)
。你能分享一些我可以进一步阅读的材料吗。老实说,我不知道用谷歌搜索什么。还有一个,我只想我可以使用,和(t1.id,t1.prod_id)
,在过滤上使用'And'after'WHERE'子句。有什么我可以进一步阅读的材料吗?抱歉耽误了你的时间。