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

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

问题描述:

我们有一个场景,如下所述,需要最佳逻辑输入。 数据库是sql server 2012.需要帮助调整Sql表最大日期逻辑

我有一个表abc列'a','b','c'和日期字段'd'。 if table abc has 10 records with different dates,which is the best optimized way to have column'a','b','c'以及'd' 其中'd'只是整个记录的最大日期组。

例如如果下面是表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个连接和表中的数据是巨大的。

请建议。

+0

我认为这是很难给你一个解决方案,如果你不知道你给出的数据.. –

你使用的是2012这两种解决方案访问表twice..Since,我会建议使用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) 
+0

@TheGameiswarCan请你解释一下覆盖索引将如何执行的 – 2017-04-25 09:35:51

+0

对于这个窗口的功能,索引应该是形式,'POC',这意味着分区和按列排序应该是关键列,并且应该包括其余的信息 – TheGameiswar

+0

@TheGameiswar感谢信息 – 2017-04-25 13:57:38

如果您希望优化插入,
您可以简单地在SELECT查询中使用MAX函数。

如果您希望优化select,
您可以使用计算列(这将减少INSERT/UPDATE性能)。

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

declare @MaxDate datetime 

Select @MaxDate=max(d) from table1 

select a,b,c @MaxDate d from table1 
+0

尽管此代码片段是受欢迎的,并且可以提供一些帮助,如果它包含* how * it解决问题的解释](// meta.stackexchange.com/q/114762)会大大改进。没有这些,你的答案就没有什么教育价值了 - 记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –