这段代码确实有效,但我想它可以以更简单的方式完成,甚至更有效(因为我猜比较像这样的字符串不是问题,但可能是问题)。我试图将所有内容转换为日期时间而不是字符串,但失败了。这段代码使用的日期和时间行从一个表,CONCATing他们,并将其与该日期时间从另一个表行。结果是: 2019-12-02 09:00:00 它只是表中的常规日期,时间和日期时间参数。像这样 Date 2019-11-17 , Time 09:00:00 , Datetime 2019-01-15 16:00:00
SELECT
MAX(CONCAT(f_ini, CONCAT( " ", h_ini)))
FROM posible_work
WHERE
fk_id_asigned = 100573 AND
(SELECT MAX(CONCAT(f_ini, CONCAT( " ", h_ini)))
FROM posible_work) >
(SELECT MAX(RIGHT(f_fin,19)) AS FechaAVI FROM next_work WHERE fk_id_worker = 100573)
除了concat()
当您可以将它与 3 个(或更多)参数一起使用时强制调用两次这一事实之外,另一个问题是这种情况:
(SELECT MAX(CONCAT(f_ini, CONCAT( " ", h_ini)))
FROM posible_work) >
(SELECT MAX(RIGHT(f_fin,19)) AS FechaAVI FROM next_work WHERE fk_id_worker = 100573)
为什么不在不等式的左边使用 justconcat(...)
然后重复SELECT...MAX(..)...
?
我不认为这会破坏您的代码逻辑:
SELECT
MAX(CONCAT(f_ini, ' ', h_ini))
FROM posible_work
WHERE
fk_id_asigned = 100573
AND
CONCAT(f_ini, ' ', h_ini) >
(SELECT MAX(RIGHT(f_fin,19)) AS FechaAVI FROM next_work WHERE fk_id_worker = 100573)
如果您没有进行100573
两次硬编码,也可能会更好。
只需正确使用别名:
SELECT
MAX(CONCAT(p.f_ini, ' ', p.h_ini))
FROM posible_work p
WHERE
p.fk_id_asigned = 100573
AND
CONCAT(p.f_ini, ' ', p.h_ini) >
(SELECT MAX(RIGHT(f_fin,19)) AS FechaAVI FROM next_work WHERE fk_id_worker = p.fk_id_asigned)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句