我的程序中有这样的查询:
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 兼容?
你好像多了一组括号。试试这个
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