将SQL结果限制为过去7天

时间:2014-11-26 19:39:34

标签: sql

我有一个简单的SQL查询,看起来像这样......

SELECT 
    COUNT (* )
AS
    count
FROM
    wlead
WHERE
    f_id = '765'

这很好但我现在想限制查询只返回过去7天的结果。有一个名为date_created的字段,其格式如下...

2014-10-12 11:31:26

是否有自动限制结果的方法,或者我是否需要在前7天前计算出日期?

4 个答案:

答案 0 :(得分:1)

是的 - 您可以使用the DATEADD() functionthe GETDATE() function

SELECT 
    COUNT(*) AS count
FROM
    wlead
WHERE
    f_id = '765' AND
    date_created >= DATEADD(DAY, -7, GETDATE())

请注意,这将返回七天前创建的记录(因此,如果现在运行,则会在美国东部时间下午2:45之后创建记录)。如果您需要从午夜开始返回所有内容,可以将其用于strip out the time portion and return midnight

SELECT 
    COUNT(*) AS count
FROM
    wlead
WHERE
    f_id = '765' AND
    date_created >= DATEADD(dd, DATEDIFF(dd, 0, getdate()) -7, 0)

答案 1 :(得分:1)

假设mysql

..AND date_created<= NOW() AND date_created>= DATE_SUB(NOW(), INTERVAL 7 DAY)

答案 2 :(得分:1)

MySQL会喜欢这个:

... WHERE DATEDIFF(getdate(), date_created) <= 7

答案 3 :(得分:1)

由于您没有提及您的DBMS,以下是ANSI SQL:

select count(*) as cnt
from wlead
where f_id = '765'
  and date_created >= current_date - interval '7' day;

如果date_created实际上是时间戳,您可能还想将其与时间戳进行比较:

select count(*) as cnt
from wlead
where f_id = '765'
  and date_created >= current_timestamp - interval '7' day;

请注意,这并不需要“删除”时间部分。 current_timestamp - interval '7' day将在7天前同时生成一个时间戳(例如20:52)

要“忽略”您可以将date_created投射到date的时间部分:

select count(*) as cnt
from wlead
where f_id = '765'
  and cast(date_created as date) >= current_date - interval '7' day;