父级和最新子级的索引(物化)视图

Vac*_*ano 6 sql-server materialized-view sql-server-2012

假设我有父-> 子表设置。打电话给他们ShipmentWidget

无论如何要创建一个索引视图,该视图将具有父级 (ShipmentId) 的 PK 和最新子级 (Widget.CreatedWhen) 的创建时间。

这是我正在寻找的查询:

SELECT  widg.ShipmentId, MAX(widg.CreatedWhen) NewestWidget
FROM    dbo.Widget widg            
GROUP BY widg.ShipmentId
Run Code Online (Sandbox Code Playgroud)

显然这个查询不能是一个索引视图,因为它已经MAX在里面了。

但是是否有其他方法通过“索引视图合法”SQL 来获得类似的结果集?

sev*_*ist 1

目前没有办法做到这一点,因为查找“最新”小部件日期将需要聚合(分组)、排名函数、子查询或应用;索引视图在其定义中不允许执行任何操作。

但是 - 您想要拥有索引视图是否有特殊原因?您在基础 Widget 表上是否有适当的索引?我假设您想要对视图进行索引的原因是这样您可以提取特定 Widget ID 的值。

我将在 (WidgetID, CreatedWhen DESC) 上索引基础表,并将您的查询实现为普通视图 - 或者如果您总是想获取单个小部件的日期,则可能是内联表值函数。