如何修复 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.