sql - 获取 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
请问有什么建议吗?
解决方案
我认为你在这里过度嵌套了东西。看起来您要编写的查询是:
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
推荐阅读
- javascript - Javascript 在右键单击时切换默认和自定义上下文菜单
- angular - 想要使用自定义颜色为每个系列赋予不同的条形颜色
- ab-initio - 在 Abinitio 中声明日期向量
- javascript - 将 html 文本作为附件发送到 sendgrid
- python - 是否有一种自动方法可以从许多表中删除与给定条件匹配的许多行?
- dictionary - Elixir:重命名字典中的键
- debugging - 如果条件命中两次,则在下面的 rust 代码中
- angular - angular-slickgrid 分组时隐藏总行数
- powershell - 通过 Invoke-Command 调用命令时 PowerShell 不一致
- angular - Angular - 模板仅显示属性时更新,但如果其中有函数则不更新