Получить Datediff (), работающий с Max () в качестве входных данных - PullRequest
0 голосов
/ 05 августа 2020

Чтобы получить максимальное значение между 2 значениями, я использую следующее:

SELECT 
    (SELECT MAX(cost)
     FROM (VALUES (cost_tran_recur.date_start),(GETDATE())) AS Allcosts(cost))
FROM
    cost_tran_recur

, и он отлично работает. Но когда я пытаюсь использовать тот же запрос в datediff, я получаю сообщение об ошибке:

SELECT
    (amount_expense * DATEDIFF(m, SELECT (SELECT MAX(cost)
                                          FROM (VALUES (cost_tran_recur.date_start),(GETDATE())) AS Allcosts(cost))
                                  FROM cost_tran_recur,  date_end)) AS TOTALS 
FROM
    (SELECT ......) AS table1

Пожалуйста, какие-нибудь предложения?

1 Ответ

1 голос
/ 05 августа 2020

Я думаю, что вы здесь слишком много вкладываете. Похоже, что вы хотите написать такой запрос:

SELECT 
    amount_expense * DATEDIFF(
        m,
        (
            SELECT MAX(cost)
            FROM (VALUES (date_start), (GETDATE())) AS Allcosts(cost)
        ),
        date_end
    ) AS TOTALS 
FROM cost_tran_recur

Я считаю, что VALUES() кажется излишним для того, что вы пытаетесь сделать. Выражение CASE выполняет свою работу с меньшим объемом ввода и меньшими накладными расходами:

SELECT 
    amount_expense * DATEDIFF(
        m,
        CASE WHEN date_start >= GETDATE() THEN date_start else GETDATE() end,
        date_end
    ) AS TOTALS 
FROM cost_tran_recu
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...