我正在尝试查询下表:
| 识别号|同意书标题|同意标识符|版本|显示顺序|
| - ------|- ------|- ------|- ------|- ------|
| 1个|脚注标题|足1|1个|1个|
| 第二章|脚注标题2|足1|第二章|第二章|
| 三个|条形标题|棒1|1个|三个|
| 四个|条形标题2|棒1|第二章|四个|
我的表包含具有唯一ConsentTemplateIdentifier的条目。我希望仅返回具有该特定唯一标识符的最高版本号的行...
| 识别号|同意书标题|同意标识符|版本|显示顺序|
| - ------|- ------|- ------|- ------|- ------|
| 第二章|脚注标题2|足1|第二章|第二章|
| 四个|条形标题2|棒1|第二章|四个|
我当前的查询似乎不起作用。它告诉我:
选择列表中的列“ConsentTemplate.ID”无效,因为聚合函数或GROUP BY子句中都不包含该列
Select Distinct ID,ConsentTitle, DisplayOrder, ConsentTemplateIdentifier, MAX(Version) as Version
from FooDocs
group by ConsentTemplateIdentifier
如何明确地选择具有最高版本号的行,这些行是按照其显示顺序排序的各个ConsentTemplateIdentifier的版本号?
任何帮助都将不胜感激。我正在使用SQL Server。
3条答案
按热度按时间8fsztsew1#
您可以使用
CROSS APPLY
执行此操作。如果您的唯一标识符有自己的表。
nhaq1z212#
使用
CROSS APPLY
可以工作,但是可以有效地为表中的每一行调用子查询,然后使用DISTINCT消除重复结果,从而产生半笛卡尔积/三角形连接。通常,只使用
ROW_NUMBER()
并避免所有的隐式连接会更高效...cdmah0mi3#
对Derrick的答案稍作修改后,我就能够使用
CROSS APPLY
以我希望看到的方式返回数据