sql-server - 使用 GROUP BY 子句时的 T-SQL Lead () 函数问题
问题描述
我正在尝试将多个表中的数据插入到一个结果表中。
但是,由于我在/ - 中使用该Lead()
函数来创建其中一个字段,因此出现错误:SELECT
GROUP BY
窗口函数只能出现在 SELECT 或 ORDER BY 子句中
我应该如何修改我的代码才能正常工作?
USE [WH];
INSERT INTO [exp].[Profile] (
[MedicalConditionFK]
, [EHRProgramFK]
, [EffectiveDate]
, [ExpirationDate]
)
SELECT
c.medicalcondition_id
, Max(ISNULL(epi.[EHRProgramFK], -1)) AS [EHRProgramFK]
, p.[effective_date] AS [EffectiveDate]
, DateAdd(day, -1, lead (p.[effective_date], 1, '2050-12-31') OVER
(partition by p.[client_id], c.[medicalcondition_id] Order By
p.[effective_date])) AS [ExpirationDate]
FROM
[exp].[Condition] c
INNER JOIN [exp].[Medical] p ON
c.[ClientMedicalProfile_id] = p.[ClientMedicalProfile_id]
LEFT JOIN [exp].[Episode] epi ON
(p.[effective_date] BETWEEN epi.[AdmissionDate]
AND epi.[DischargeDate] and epi.[DBCode] = 'CS-SM')
WHERE
(p.[effective_date] IS NOT NULL)
GROUP BY
c.medicalcondition_id
, p.[effective_date]
, DateAdd(day, -1, lead (p.[effective_date], 1, '2050-12-31') OVER
(partition by p.[client_id], c.[medicalcondition_id] Order By p.[effective_date]))
解决方案
为了使您的查询有效,您需要将窗口函数中使用的列放在group by
子句中(而不是窗口函数本身)。
基本上这意味着您必须添加列client_id
:
GROUP BY
c.medicalcondition_id,
p.[effective_date],
p.[client_id]
虽然这将避免语法错误,但我无法判断这是否会产生您想要的结果集。为此,您可能需要提出一个新问题,提供适当的样本数据和所需的结果。
推荐阅读
- numerical-computing - 如何计算数值稳定的 log(exp(x)-exp(y))
- mysql - 如何加快我的 MySQL 查询(JOINs + GROUP BY)
- javascript - 将组件直接渲染到模板中
- tfs - TFS 2017 本地 Epic 的进展
- python - Python selenium - 使用动作链选择一个元素
- python - 将一系列 DateTime 值转换为正确的格式
- java - 垃圾收集器的作用
- javascript - JavaScript:在递归之间需要一个共享数组才能将结果推送到
- android - 即使在添加 ViewModel 后配置也会发生变化:Android 架构组件
- python - python3 不允许 urllib 导入