我正在使用SQL Server 2014。
我需要将以下查询的结果发送到客户端应用程序:
SELECT PrimaryKeyID, ColA, ColB, ColC , CreateDate
FROM VeryHeavyView
WHERE Condtion<123
我需要将Max(PrimaryKeyID)
和Max(CreateDate)
记录到日志表中。
我喜欢用开销来做。最有效的方法是什么?
更新1
以下是一些如何做到这一点的想法,但我想我在这里发帖提问,看看是否有更好或更有效的方法:
我可以按所有列进行分组。这是非常昂贵的,因为我使用的实际查询非常昂贵,结果是3000行。
我可以查询SELECT @Var1=PrimaryKeyID, ColA, ColB, ColC , @Var2=CreateDate FROM VeryHeavyView ORDER BY PrimaryKeyID
,但我不确定是否支持
答案 0 :(得分:1)
您可以编写查询和查询,计算您想要的两个最大值作为公用表表达式,然后将两者交叉连接在一起。
WITH
q AS (
SELECT PrimaryKeyID, ColA, ColB, ColC , CreateDate
FROM VeryHeavyView
WHERE Condtion<123
),
m AS (
SELECT max( PrimaryKeyID ) AS max_id,
max( CreateDate ) AS max_create_date
FROM q
)
SELECT q.*, m.*
FROM q CROSS JOIN m
由于第二个CTE(m)应该只返回一行,这只会将max_id和max_create_date列附加到结果的右侧(每行都有相同的值)。
答案 1 :(得分:0)
您可能需要窗口聚合功能
SELECT Max(PrimaryKeyID) over (order by PrimaryKeyID desc),
, ColA, ColB, ColC ,
Max(CreateDate) over (order by CreateDate desc)
FROM SomeTable
WHERE Condtion<123
您可以学习更多here
答案 2 :(得分:0)
根据我的经验,如果您在存储过程中执行此操作,则可以运行查询以获取最大值并执行相同的查询以获取所有最大值,并且您不会真正添加任何时间假设查询计划被缓存,则为执行时间。
连续运行这2个查询,可能与运行其中一个查询的时间相同,但会给你2个结果。
<input name="ROS_services" type="radio" name="display" id="display1" />
<input name="ROS_services" type="radio" name="display" id="display2" />
<input name="ROS_services" type="radio" name="display" id="display3" />
<br />
<br />
<label for="display1">label1</label><br />
<label for="display2">label2</label><br />
<label for="display3">label3</label><br />