SQL Предложение GROUP BY и получение точности с плавающей запятой 2 при вычислении DATESPAN с помощью AVG - PullRequest
0 голосов
/ 19 февраля 2020

В настоящее время я пытаюсь найти лучший способ получить процент по столбцу, который является подсчетом дней между двумя датами. Затем я хочу найти среднее значение.

SELECT 
    [Filed1],
    [Field2],
    COUNT(items) AS [Total Items],
    CAST(AVG(
            (DATEDIFF(SECOND,
                    [DateStart],
                    [DateEnd])
            )/36000) 
        )AS DECIMAL(10,2)) [Avg Days]
        FROM [MY DB]

Я не могу получить точные 3,5 дня или 7,1 дня, он возвращает только целые числа с двумя десятичными знаками как 5,00, 6,00 и так далее. Как я могу обработать расчет диапазона дат с десятичной точностью в среднем?

1 Ответ

2 голосов
/ 19 февраля 2020

Вероятно, вы сталкиваетесь с целочисленным делением: поскольку числитель и знаменатель деления являются целыми числами, база данных принудительно преобразует результат деления в целочисленный результат.

Многие базы данных реализуют такое поведение - SQL Сервер является одним из них, который я подозреваю, что вы используете (вы также пометили свой вопрос MySQL, но этот не делит целочисленное деление - и ваш синтаксис в квадратных скобках также указывает на это).

Один из способов решить эту проблему - сделать одно из десятичных чисел, например:

CAST(
    AVG(DATEDIFF(SECOND, [DateStart], [DateEnd])/36000.00) 
    AS DECIMAL(10,2)
) [Avg Days]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...