在调整Sql表最大日期逻辑方面需要帮助

时间:2017-04-25 09:13:12

标签: sql-server database-performance query-performance

我们有一个如下所述的场景,需要输入以获得最佳逻辑。 数据库是sql server 2012。

我有一个表格abc,其中包含列' a' ,' b' ,' c'和日期字段' d。 如果表abc有10个具有不同日期的记录,这是最佳的优化方式 有列' a' ,' b' ,' c'以及' d' 在哪里' d'只是整个记录集的最大日期。

e.g。如果下面是表abc数据,

a   b   c   d
a1  b1  c1  01-02-2017
a2  b2  c2  02-02-2017
a3  b3  c3  10-02-2017
a4  b4  c4  04-02-2017

what we need is,

a   b   c   d
a1  b1  c1  10-02-2017
a2  b2  c2  10-02-2017
a3  b3  c3  10-02-2017
a4  b4  c4  10-02-2017

这里我们需要在所有记录中复制最大日期。

到目前为止我们尝试过的事情。

选项1. Select a , b, c, (Select max(d) from abc) d from abc

选项2.

Select a , b, c, max.max_D from abc
            join (Select max(d) max_D from abc) max on 1=1 

注意:这只是例如我们的实际要求是相同的,但我们有超过10个连接,表中的数据是巨大的。

请建议。

3 个答案:

答案 0 :(得分:0)

你的两个解决方案访问表两次..由于你使用的是2012,我建议使用windows函数来处理这个

Select a , b, c, 
max(d)over (order by d desc) as maxx
from abc

要使此查询以最佳方式执行,您需要以下索引

create index nci on table(d)
include(a,b,c)

答案 1 :(得分:0)

如果您希望优化插入,您可以在SELECT查询中使用MAX功能
如果您希望优化选择,
您可以使用计算列(这将降低INSERT / UPDATE性能)。

https://technet.microsoft.com/en-us/library/ms191250(v=sql.105).aspx

答案 2 :(得分:0)

declare @MaxDate datetime

Select @MaxDate=max(d) from table1

select a,b,c @MaxDate d from table1