我有一个简单的SQL查询,看起来像这样......
SELECT
COUNT (* )
AS
count
FROM
wlead
WHERE
f_id = '765'
这很好但我现在想限制查询只返回过去7天的结果。有一个名为date_created的字段,其格式如下...
2014-10-12 11:31:26
是否有自动限制结果的方法,或者我是否需要在前7天前计算出日期?
答案 0 :(得分:1)
是的 - 您可以使用the DATEADD()
function和the 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;