如何修复 HFSQL 中的“SELECT 或 HAVING 子句外不允许聚合函数(COUNT、AVG、SUM、MIN、MAX)”错误
How to fix " Aggregate functions (COUNT, AVG, SUM, MIN, MAX) are not allowed outside SELECT or HAVING clauses" Error in HFSQL
我正在使用 windev 20 的控制中心 HFSQL 来执行查询。
我想计算每项服务的最大和最小 MAX(小时)和 MIN(小时)之间的时间和日期差异,以及天数(如果有的话)。
我尝试了 DateDifference 和 DateTimeDifference 函数,但不幸的是我遇到了错误。
以下代码只是为了查看每项服务的最长和最短小时数,它运行良好,但不是我想要的:
SELECT Service.Libellé AS Libellé,
Min(DetailCircuitFacture.Heure),MAX(DetailCircuitFacture.Heure)
FROM detailcircuitfacture
joIN Service on
Service.CodeSce=detailcircuitfacture.CodeSce
group by Service.Libellé
我想在每个服务的 MAX 和 Min 之间区分日期和时间
像这样:
SELECT Service.Libellé AS Libellé, WL.DateDifférence(Min(DetailCircuitFacture.DATE),
Max(DetailCircuitFacture.DATE)) AS Nombre_jours,
WL.DateHeureDifférence(Min(DetailCircuitFacture.Heure),Max(DetailCircuitFacture.Heure)) AS Nombre_heurs
FROM detailcircuitfacture
JOIN Service on
Service.CodeSce=detailcircuitfacture.CodeSce
group by Service.Libellé
我希望输出没有错误,但实际输出是
<> 请求的 SQL 代码错误。不可能初始化查询。
SELECT 或 HAVING 子句
之外不允许使用聚合函数(COUNT、AVG、SUM、MIN、MAX)
期待结果
提前致谢
我会说你的问题是试图将聚合函数的结果用作函数参数。
你可以用子查询解决这个问题:
SELECT Libellé,
WL.DateDifférence(min_date, max_date) AS Nombre_jours,
WL.DateHeureDifférence(min_heurs, max_heurs) AS Nombre_heurs
FROM (
SELECT Service.Libellé AS Libellé,
MIN(DetailCircuitFacture.DATE) AS min_date,
MAX(DetailCircuitFacture.DATE) AS max_date,
MIN(DetailCircuitFacture.Heure) AS min_heurs,
MAX(DetailCircuitFacture.Heure) AS max_heurs
FROM detailcircuitfacture
JOIN Service ON Service.CodeSce=detailcircuitfacture.CodeSce
GROUP BY Service.Libellé
) core
GROUP BY Libellé;
编辑:由于原始问题已更新为包括它是关于 HFSQL,我应该说我没有使用 HFSQL 的经验。此答案基于更常见的数据库共享的基本 SQL 语法,如 MySQL、PostgreSQL 和 SQL Server.
我正在使用 windev 20 的控制中心 HFSQL 来执行查询。 我想计算每项服务的最大和最小 MAX(小时)和 MIN(小时)之间的时间和日期差异,以及天数(如果有的话)。
我尝试了 DateDifference 和 DateTimeDifference 函数,但不幸的是我遇到了错误。
以下代码只是为了查看每项服务的最长和最短小时数,它运行良好,但不是我想要的:
SELECT Service.Libellé AS Libellé,
Min(DetailCircuitFacture.Heure),MAX(DetailCircuitFacture.Heure)
FROM detailcircuitfacture
joIN Service on
Service.CodeSce=detailcircuitfacture.CodeSce
group by Service.Libellé
我想在每个服务的 MAX 和 Min 之间区分日期和时间 像这样:
SELECT Service.Libellé AS Libellé, WL.DateDifférence(Min(DetailCircuitFacture.DATE),
Max(DetailCircuitFacture.DATE)) AS Nombre_jours,
WL.DateHeureDifférence(Min(DetailCircuitFacture.Heure),Max(DetailCircuitFacture.Heure)) AS Nombre_heurs
FROM detailcircuitfacture
JOIN Service on
Service.CodeSce=detailcircuitfacture.CodeSce
group by Service.Libellé
我希望输出没有错误,但实际输出是
<> 请求的 SQL 代码错误。不可能初始化查询。 SELECT 或 HAVING 子句
之外不允许使用聚合函数(COUNT、AVG、SUM、MIN、MAX)期待结果
提前致谢
我会说你的问题是试图将聚合函数的结果用作函数参数。
你可以用子查询解决这个问题:
SELECT Libellé,
WL.DateDifférence(min_date, max_date) AS Nombre_jours,
WL.DateHeureDifférence(min_heurs, max_heurs) AS Nombre_heurs
FROM (
SELECT Service.Libellé AS Libellé,
MIN(DetailCircuitFacture.DATE) AS min_date,
MAX(DetailCircuitFacture.DATE) AS max_date,
MIN(DetailCircuitFacture.Heure) AS min_heurs,
MAX(DetailCircuitFacture.Heure) AS max_heurs
FROM detailcircuitfacture
JOIN Service ON Service.CodeSce=detailcircuitfacture.CodeSce
GROUP BY Service.Libellé
) core
GROUP BY Libellé;
编辑:由于原始问题已更新为包括它是关于 HFSQL,我应该说我没有使用 HFSQL 的经验。此答案基于更常见的数据库共享的基本 SQL 语法,如 MySQL、PostgreSQL 和 SQL Server.