当我在表中有数百万或行时,如何以最快的方式从当前日期选择周数据(更准确地说,是最近 7 天的数据)。我在 sql 表中有一个 created_date 的时间戳。
我试过这个
SELECT Created_Date
FROM Table_Name
WHERE Created_Date >= DATEADD(day,-7, GETDATE())
我有两个问题:
- 这个查询是否正确?
- 这是从具有数百万行的表中获取最近 7 天数据的最快方法吗?
当我在表中有数百万或行时,如何以最快的方式从当前日期选择周数据(更准确地说,是最近 7 天的数据)。我在 sql 表中有一个 created_date 的时间戳。
我试过这个
SELECT Created_Date
FROM Table_Name
WHERE Created_Date >= DATEADD(day,-7, GETDATE())
我有两个问题:
是的,语法是准确的,应该没问题。
这是我为您的特定案例创建的SQL Fiddle 演示
create table sample2
(
id int primary key,
created_date date,
data varchar(10)
)
insert into sample2 values (1,'2012-01-01','testing');
这里是如何选择数据
SELECT Created_Date
FROM sample2
WHERE Created_Date >= DATEADD(day,-11117, GETDATE())
选择过去 7 天的记录
SELECT * FROM [TableName]
WHERE Created_Date >= DATEADD(day, -7, GETDATE())
选择本周的记录
SET DATEFIRST 1 -- Define beginning of week as Monday
SELECT * FROM [TableName]
WHERE CreatedDate >= DATEADD(day, 1 - DATEPART(WEEKDAY, GETDATE()), CONVERT(DATE, GETDATE()))
AND CreatedDate < DATEADD(day, 8 - DATEPART(WEEKDAY, GETDATE()), CONVERT(DATE, GETDATE()))
如果您想选择上周而不是过去 7 天的记录
SET DATEFIRST 1 -- Define beginning of week as Monday
SELECT * FROM [TableName]
WHERE CreatedDate >= DATEADD(day, -(DATEPART(WEEKDAY, GETDATE()) + 6), CONVERT(DATE, GETDATE()))
AND CreatedDate < DATEADD(day, 1 - DATEPART(WEEKDAY, GETDATE()), CONVERT(DATE, GETDATE()))
2A。就过去 7 天而言,行数比整个表少得多,索引可以提供帮助
2B。如果您只对 Created_Date 感兴趣,您可以尝试使用一些分组依据和计数,它应该有助于结果集大小