Как исправить «Агрегатные функции (COUNT, AVG, SUM, MIN, MAX) не допускаются вне предложений SELECT или HAVING» Ошибка в HFSQL - PullRequest
0 голосов
/ 04 апреля 2019

Я использую центр управления HFSQL из windev 20 для выполнения запроса. Я хотел бы рассчитать разницу во времени и дате между максимальным и минимальным значениями 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 запроса <>. Инициализация запроса невозможна. Агрегатные функции (COUNT, AVG, SUM, MIN, MAX) не допускаются за пределами предложений SELECT или HAVING


ожидаемый результат

expected result

Заранее спасибо

1 Ответ

0 голосов
/ 04 апреля 2019

Я бы сказал, что ваша проблема пытается использовать результат статистической функции в качестве параметра функции.

Эту проблему можно решить с помощью подзапроса:

  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.

...