Mysql 找不到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

我正在尝试运行此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.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