如何解决“ SELECT或HAVING子句之外不允许使用集合函数(COUNT,AVG,SUM,MIN,MAX)” HFSQL中的错误

时间:2019-04-04 16:46:03

标签: sql windev

我正在使用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é

我想对每种服务的最大和最小值之间进行日期和小时的区别 像这样:

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)


预期结果

expected result

多谢

1 个答案:

答案 0 :(得分:0)

我要说的是您的问题试图将聚合函数的结果用作函数参数。

您可以使用子查询解决此问题:

  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的经验。该答案基于由MySQL,PostgreSQL和SQL Server等更常见的数据库共享的基本SQL语法。