如何改进此 SQL 查询?

费兰·拉米雷斯·马蒂

这段代码确实有效,但我想它可以以更简单的方式完成,甚至更有效(因为我猜比较像这样的字符串不是问题,但可能是问题)。我试图将所有内容转换为日期时间而不是字符串,但失败了。这段代码使用的日期时间行从一个表,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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章