需要帮助调整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个连接和表中的数据是巨大的。
请建议。
你使用的是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)
@TheGameiswarCan请你解释一下覆盖索引将如何执行的 – 2017-04-25 09:35:51
对于这个窗口的功能,索引应该是形式,'POC',这意味着分区和按列排序应该是关键列,并且应该包括其余的信息 – TheGameiswar
@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
尽管此代码片段是受欢迎的,并且可以提供一些帮助,如果它包含* how * it解决问题的解释](// meta.stackexchange.com/q/114762)会大大改进。没有这些,你的答案就没有什么教育价值了 - 记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –
我认为这是很难给你一个解决方案,如果你不知道你给出的数据.. –