2016-04-28 12 views
3

ich diese SQL-Abfrage auszuführen versuchen:kann nicht SQL-Syntaxfehler finden

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 

aber ich sehe diesen Fehler: in der Abfrage

#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 

und ich kann nicht feststellen, wo der Fehler

+0

Was SQL? SQL Server? Aktualisieren Sie Ihre Tags. –

+0

editierte Frage :) – charlie

+6

Sieht so aus, als ob du ')' zu früh vor 'as response_seconds' geschlossen hast. Das gehört in das '(select ...)', aber du hast es draußen. Die korrekte Syntax, die in der Nähe von FROM verwendet wird, bedeutet, dass Sie unmittelbar danach suchen müssen, um das Problem zu finden. –

Antwort

1

) die eine weitere zusätzliche Klammer in den )) as response_seconds das Problem verursacht, zu entfernen, die lösen das Problem. Zur besseren Lesbarkeit habe ich den Code ausgerichtet:

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

Zählen Sie Ihre Klammern. Sie sind dies im Wesentlichen tun:

SELECT some_column as s 
FROM some_sub_select as response_seconds 
FROM tickets t JOIN ticket_updates u ON t.ticketnumber = u.ticketnumber 
.... 

Sie nicht zwei FROM Klauseln in derselben Abfrage haben.

Vielleicht haben Sie falsch ausgerichtete Klammern? Vielleicht wollten Sie eine JOIN statt einer zweiten FROM? Es ist schwer zu sagen, was als unvollständige Gesamtabfrage erscheint.

2

entfernen die ) kurz vor 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 

Sie auf dieser Berechnung zu viele schließenden Klammern hatte, die die Wirkung des Schließens des Unter früh wählen musste.

+0

Aber dann hast du 'FROM response_seconds' und' FROM tickets'? –

+0

Es ist eine Unterabfrage, es braucht eine VON – RiggsFolly

+0

Oh, jetzt nach dem Ausrichten, sehe ich, dass Sie richtig sind. +1 –

0

Es scheint, dass Sie eine extra ')' hier "tetime))) < - als response_seco" haben


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