简体   繁体   中英

SQL query causes error “Incorrect syntax near the keyword 'order'”

This is my SQL query, and I get an error:

Incorrect syntax near the keyword 'order'

I have checked everything, but I am unable to correct this. How can I fix it?

SELECT TOP (1)
    CONVERT(VARCHAR(19), DayCheckOut, 120)
FROM
    (SELECT TOP (2)
         A1.DayCheckOut AS DayCheckOut
     FROM
         EmployeeAttendace A1
     INNER JOIN
         EmployeeMaster B1 ON A1.EmployeeId = B1.Id
     WHERE
         B1.EmailId = 'raja.xyz@gmail.com'
     ORDER BY
         A1.Id DESC)
ORDER BY
    DayCheckOut DESC

Use an alias name:

 SELECT top 1
 convert(varchar(19),DayCheckOut,120)
 FROM
   (SELECT top 2 A1.DayCheckOut as DayCheckOut FROM EmployeeAttendace A1 INNER JOIN
    EmployeeMaster B1 ON A1.EmployeeId = B1.Id WHERE B1.EmailId =
    'pooja.yadav@computronics.in' order by A1.Id desc) as AliasName
 order by DayCheckOut desc

You need an alias, let's say q , for the subquery (SELECT top 2 A1.DayCheckOut as DayC ... order by A1.Id desc) q

That's a very common problem for an SQL Server database.

There isn't any need for that sub-query. Modern SQL Server versions support OFFSET / FETCH FIRST .

SELECT convert(varchar(19),A1.DayCheckOut,120)
FROM EmployeeAttendace A1 INNER JOIN EmployeeMaster B1 ON A1.EmployeeId = B1.Id
WHERE B1.EmailId = 'raja.xyz@gmail.com'
order by A1.Id desc
offset 1 fetch next 1 row only

Ie, use OFFSET to skip the first row, and use FETCH NEXT to return only one row.

It errors there, because you need an alias for a subquery.

However, you didn't need the redundant subquery:

SELECT top (1) convert(varchar(19),A1.DayCheckOut,120) as DayCheckOut 
        FROM EmployeeAttendace A1 
        INNER JOIN EmployeeMaster B1 ON A1.EmployeeId = B1.Id 
        WHERE B1.EmailId = 'raja.xyz@gmail.com' 
order by A1.DayCheckOut desc;

Use:

SELECT TOP (1) convert(varchar(19),DayCheckOut,120)
FROM (SELECT TOP (2) A1.DayCheckOut as DayCheckOut
      FROM EmployeeAttendace A1 INNER JOIN
           EmployeeMaster B1
           ON A1.EmployeeId = B1.Id
      WHERE B1.EmailId in ('raja.xyz@gmail.com')
      ORDER BY A1.Id desc
     )
ORDER BY DayCheckOut DESC

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM