【问题标题】:How to select last one week data from today's date如何从今天的日期中选择最后一周的数据
【发布时间】:2012-10-27 07:07:51
【问题描述】:

如何以最快的方式从当前日期选择周数据(更准确地说,是最近 7 天的数据),因为我在表中有数百万或行。我在 sql 表中有 created_date 的时间戳。

我试过了

SELECT Created_Date
FROM Table_Name
WHERE Created_Date >= DATEADD(day,-7, GETDATE())

我有两个问题:

  1. 这个查询是否正确?
  2. 这是从具有数百万行的表中获取最近 7 天数据的最快方法吗?

【问题讨论】:

    标签: sql-server-2008 dateadd


    【解决方案1】:

    选择过去 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()))
    

    【讨论】:

      【解决方案2】:

      是的,语法是准确的,应该没问题。

      这是我为您的特殊情况创建的SQL Fiddle Demo

      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())
      

      【讨论】:

        【解决方案3】:
        1. 查询正确

        2A。就过去 7 天的行数而言,索引可以提供帮助的行数比整个表少得多

        2B。如果您只对 Created_Date 感兴趣,您可以尝试使用一些分组依据和计数,它应该有助于结果集大小

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-19
          • 2020-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-05
          • 2015-07-23
          相关资源
          最近更新 更多