首页 > 解决方案 > 获取 Datediff() 使用 Max() 作为输入

问题描述

为了获得 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

请问有什么建议吗?

标签: sqlsql-server

解决方案


我认为你在这里过度嵌套了东西。看起来您要编写的查询是:

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

推荐阅读