从日志表中获取昨天的记录

时间:2012-05-30 10:09:36

标签: sql performance sql-server-2005 date time

情景:

带有时间戳字段的大量记录(2百万)的日志表。 没有索引,除了ID作为主键,索引(或任何其他持久对象)创建是不可能的

我想从昨天开始选择所有记录。

我知道有几种方法可以做到这一点,我只是希望以“最佳”的方式发表意见,而且最好的意思是最快的。

这里的诀窍是时间戳的“时间”,因为如果现在是上午11点,我会做类似的事情:

where modifiedDate between dateadd(dd,-1,getdate()) and getdate()

我只从昨天11点获取记录,并将从今天获得数据

它的sql 2005所以没有“Date”数据类型

2 个答案:

答案 0 :(得分:5)

SELECT *
FROM  myTable
WHERE modifiedDate >= dateadd(day,datediff(day,0,GETDATE()),-1)
    AND modifiedDate < dateadd(day,datediff(day,0,GETDATE()),0)
带演示的

SQL Fiddle

答案 1 :(得分:1)

SELECT  *
FROM    mytable
WHERE   modifiedDate >= DATEADD(dd, -1, CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME))
        AND modifiedDate < CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME))