Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQL 2005正在获取本年度的数据_Sql Server 2005 - Fatal编程技术网

Sql server 2005 SQL 2005正在获取本年度的数据

Sql server 2005 SQL 2005正在获取本年度的数据,sql-server-2005,Sql Server 2005,我有一个保存2012年至今的销售数据的视图,我需要编写只显示当前年度销售(2013年)的查询 这是我在第一阶段尝试的 SELECT * FROM [Sales_Data] WHERE invoiceDate between '2013-01-01' and '2013-12-31' 此查询需要2秒来加载数据,我想更改查询以获取不需要我手动更新的数据,这是我在网上找到的: select * from [Sales_Data] where datepart(yyyy,invoiceDa

我有一个保存2012年至今的销售数据的视图,我需要编写只显示当前年度销售(2013年)的查询

这是我在第一阶段尝试的

SELECT * 
FROM [Sales_Data] 
WHERE invoiceDate  between '2013-01-01' and '2013-12-31' 
此查询需要2秒来加载数据,我想更改查询以获取不需要我手动更新的数据,这是我在网上找到的:

select * from [Sales_Data]  
where datepart(yyyy,invoiceDate) =datepart(yyyy,getdate()) 
and datepart(yyyy,invoiceDate) =datepart(yyyy,getdate())
因此,此查询显示数据的时间要长得多(9秒)。
请告诉我是否有更好的查询可以在更短的时间内定义和获取数据?

您的第二个查询需要sql server为您要查询的每一行执行计算

以下查询与原始select语句更为匹配

select * from [Sales_data]
where invoiceDate between DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) --- First Day of current year
and DATEADD(MILLISECOND, -3,DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)) --- Last Day of current year
根据您所查询的视图的情况,您还可以从包含invoiceDate字段的索引中获益


您可能希望检查运行查询时生成的执行计划,以查看查询运行时幕后发生的情况。

第二次查询在
WHERE
子句中重复相同的条件,完全没有任何原因。它可以从[Sales_Data]中缩短为
SELECT*,其中DatePart(yyyy,invoiceDate)=DatePart(yyyy,GetDate())
my friend,执行查询需要41秒:)请告诉我如何添加索引。谢谢,这里可能还有其他问题,因为我的查询应该只比第一个查询长几毫秒,因为唯一真正的区别是它正在计算BEVERY语句的开始日期和结束日期。如果您从…中选择计数(*),而不是从…中选择计数(*),这些操作将如何执行?对于在Sql 2005中创建索引,有一个很好的代码项目指导:我看不出任何问题,我也在不同的服务器上测试了相同的查询,但您的版本比所有其他查询都要耗时。如果我给您发送了错误的路径,我深表歉意。我已经多次使用过类似的查询,通常是以类似的查询的形式返回当月的数据,但从未注意到它们的性能问题。在我发布我的答案之前,我测试了一个我们维护的数据库的查询(一个记录表,其中有146mm的记录,从今年开始的4.4mm),我的查询与第一个查询一致,比第二个查询快2秒。