Mysql 找不到SQL语法错误
我正在尝试运行此SQL查询:Mysql 找不到SQL语法错误,mysql,sql,Mysql,Sql,我正在尝试运行此SQL查询: SELECT avg(response_seconds) as s FROM ( select time_to_sec( timediff( from_unixtime( floor( UNIX_TIMESTAMP(u.datetime)/60 )*60 ), u.datetime) ) ) as response_seconds FROM tickets t JOIN ticket_updates u ON t.ticketnumber = u
SELECT avg(response_seconds) as s FROM
( select time_to_sec( timediff( from_unixtime( floor( UNIX_TIMESTAMP(u.datetime)/60 )*60 ), u.datetime) ) ) as response_seconds
FROM tickets t JOIN ticket_updates u ON t.ticketnumber = u.ticketnumber
WHERE u.type = 'update' and t.customer = 'Y' and DATE(u.datetime) = '2016-04-18'
GROUP BY t.ticketnumber)
AS r
但我看到了这个错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM tickets t JOIN ticket_updates u ON t.ticketnumber = u.ticketnumber WHE' at line 3
我无法计算出查询中的错误在哪里请计算括号。你基本上是这样做的:
SELECT some_column as s
FROM some_sub_select as response_seconds
FROM tickets t JOIN ticket_updates u ON t.ticketnumber = u.ticketnumber
....
同一查询中不能有两个FROM子句
也许你的括号不对?也许你是想加入一个团队而不是一秒钟?很难从一个不完整的整体查询中分辨出来 在响应前几秒移除
您必须在该计算中使用多个结束括号,这会使子选择提前结束。似乎您在as响应中有一个额外的here tetime导致问题的额外括号,删除该括号将解决问题。为了更好的可读性,我调整了代码:
SELECT avg(response_seconds) AS s
FROM
(
SELECT
time_to_sec(
timediff(
from_unixtime(
floor(
UNIX_TIMESTAMP(u.datetime)/60
)*60
), u.datetime
) -- ) the one more extra parenthesis causing the problem
) as response_seconds
FROM tickets t
JOIN ticket_updates u ON t.ticketnumber = u.ticketnumber
WHERE u.type = 'update' and t.customer = 'Y' and DATE(u.datetime) = '2016-04-18'
GROUP BY t.ticketnumber
) AS r
什么SQL?SQL Server?更新您的标签。已编辑的问题:看起来您关闭得太早,因为响应时间为秒。属于“选择”菜单中的。。。但是你把它放在外面了。使用near-FROM的正确语法意味着您必须在查找问题之前立即查找。您有两个FROM-一个来自嵌套查询,另一个来自tickets,您需要将tickets连接到查询。您有6个开口,在分组后应最终关闭,但是第六次关闭发生在响应秒之前。但是你有FROM response秒和FROM tickets?这是一个子查询,它需要FROM哦,现在在对齐之后,我知道你是正确的+1.
SELECT avg(response_seconds) as s
FROM (
select time_to_sec( timediff( from_unixtime( floor( UNIX_TIMESTAMP(u.datetime)/60 )*60 ), u.datetime) ) as response_seconds
FROM tickets t JOIN ticket_updates u ON t.ticketnumber = u.ticketnumber
WHERE u.type = 'update' and t.customer = 'Y' and DATE(u.datetime) = '2016-04-18'
GROUP BY t.ticketnumber
) AS r
SELECT avg(response_seconds) AS s
FROM
(
SELECT
time_to_sec(
timediff(
from_unixtime(
floor(
UNIX_TIMESTAMP(u.datetime)/60
)*60
), u.datetime
) -- ) the one more extra parenthesis causing the problem
) as response_seconds
FROM tickets t
JOIN ticket_updates u ON t.ticketnumber = u.ticketnumber
WHERE u.type = 'update' and t.customer = 'Y' and DATE(u.datetime) = '2016-04-18'
GROUP BY t.ticketnumber
) AS r