2016-04-28 103 views
3

我试图运行该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.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 

,我不能工作了错误所在查询

+0

什么SQL? SQL Server?更新您的标签。 –

+0

编辑的问题:) – charlie

+6

看起来像你在'as response_seconds'之前太早关闭''''。这属于'(select ...)'内部,但你在外面。 “在FROM附近使用正确的语法”意味着您必须立即查看该问题才能找到问题。 –

回答

1

)一个更额外的括号中)) as response_seconds导致此问题,删除,将解决问题。为方便阅读,我对齐的代码:

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 
-1

计算括号。你基本上是这样做的:

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子句。

也许你未对齐的括号?也许你打算做一个JOIN而不是第二个FROM?从看似不完整的整体查询中很难分辨出来。

2

取出)只是as response_seconds之前

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 

你必须多收支架上计算了其提前关子选择的效果。

+0

但是你有'FROM response_seconds'和'FROM tickets'? –

+0

它的一个子查询,它需要一个FROM – RiggsFolly

+0

哦,现在对齐后,我看你是对的。 +1 –

0

看来你有一个额外的“)”在这里“tetime)))< - 作为response_seco”


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