我的查询的 SQL 语法有什么问题?

问题描述 投票:0回答:1

我的程序中有这样的查询:

SELECT customer.Id, customer.FirstName, customer.LastName, SUM(PeriodHours) AS SUMPeriodHours, PeriodDay 
FROM (
      (SELECT CustomerId, 
              (UNIX_TIMESTAMP(taskinterval.EndDateUtc) - UNIX_TIMESTAMP(taskinterval.StartDateUtc)) / 3600 AS PeriodHours, 
              date(taskinterval.StartDateUtc) as PeriodDay
       FROM taskinterval
       WHERE StartDateUtc > @STARTDATE and StartDateUtc<@ENDDATE
      ) AS tmptbl
 ) 
INNER JOIN customer on customer.Id = tmptbl.CustomerId
GROUP BY PeriodDay, customer.Id, customer.FirstName, customer.LastName

当我替换“@ENDDATE”和“@STARTDATE”时,它在我的程序代码中不起作用,在 SqlWorkbench 中也不起作用

它在 MariaDB 10.3.32 上工作正常,但在 MySQL 8.0.35 上它不起作用,显示这样的错误:


错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“) Inner Join customer on customer.Id = tmptbl.CustomerId group”附近使用的正确语法


这个错误对我来说似乎很模糊。我看过这篇文章:https://mariadb.com/kb/en/incompatibilities-and-feature-differences- Between-mariadb-10-4-and-mysql-8-/但没有找到任何内容可以帮助我解决这个问题。如何修复此查询以使其与 MySQL 兼容?

sql mysql mariadb
1个回答
0
投票

你好像多了一组括号。试试这个

    Select
    customer.Id,
    customer.FirstName,
    customer.LastName,
    SUM(PeriodHours) as SUMPeriodHours,
    PeriodDay
    from
    (
    SELECT
      CustomerId,
      (
        UNIX_TIMESTAMP(taskinterval.EndDateUtc) - UNIX_TIMESTAMP(taskinterval.StartDateUtc)
      ) / 3600 as PeriodHours,
      date(taskinterval.StartDateUtc) as PeriodDay
    FROM
      taskinterval
    where
      StartDateUtc > @STARTDATE
      and StartDateUtc < @ENDDATE
    ) as tmptbl
     Inner Join customer on customer.Id = tmptbl.CustomerId
    group by
  PeriodDay,
  customer.Id,
  customer.FirstName,
  customer.LastName
© www.soinside.com 2019 - 2024. All rights reserved.