SQL Server: выберите минимум между двумя значениями в сумме - PullRequest
0 голосов
/ 13 июля 2011

Буду признателен, если кто-нибудь сможет мне помочь с этим оператором SQL. В настоящее время у меня есть это:

select sum(datediff(second, [date1], [date2])) from [MyTable] where <condition>

Но мне нужно уточнить этот выбор, т. Е. Если разница между датами больше, чем @MaxDiffSecs, тогда вместо суммирования следует использовать @MaxDiffSecs. Я попытался посмотреть на оператор MIN, но у него есть только один параметр, где я ожидаю, что минимум 2 получит минимум.

Ну, в любом случае, спасибо заранее. (Я думаю, вы можете сказать, что я не очень эффективен в SQL:)

1 Ответ

3 голосов
/ 13 июля 2011
SELECT SUM(
    CASE WHEN DATEDIFF(second, [date1], [date2]) > @MaxDiffSecs THEN @MaxDiffSecs
    ELSE DATEDIFF(second, [date1], [date2]) END)
FROM [MyTable] 
WHERE <condition>

Это не в моей голове, не уверен, работает ли CASE внутри SUM

Если этот синтаксис не работает, вы можете использовать CTE

WITH ValuesToSum AS (
    SELECT CASE WHEN DATEDIFF(second, [date1], [date2]) > @MaxDiffSecs THEN @MaxDiffSecs
        ELSE DATEDIFF(second, [date1], [date2]) END AS TheValue
    FROM [MyTable]
    WHERE <condition>
)

SELECT SUM(TheValue) FROM ValuesToSum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...