2017-03-17 72 views
1

我在MS SQL Server中运行以下SQL语句:如何将日期范围纳入WHERE子句中?

SELECT 
    COUNT(*) 
FROM 
    [dbo].[QueueAuditTrail] with(nolock) 
WHERE 
    (queueenddatetime >= '2017-03-17 14:00:00.000' 
    AND queueenddatetime < '2017-03-17 16:36:00.000') 
    AND queuetype = 7 
GROUP BY 
    queuetype 
HAVING 
    COUNT(queuetype) < 100000; 

queueenddatetime列是UTC格式的时间戳。此SQL语句适用于给定的时间范围;然而,我想配置WHERE声明以反映“大于或等于当前UTC时间减去20分钟”和“小于当前UTC时间”之间的时间范围(使用“YYYY-MM-DD hh:mm :ss.xxx“)格式。如何才能做到这一点?

+1

您正在使用什么数据库管理系统? MySQL,Oracle ...? –

+0

我不明白这个查询中'''group by'''和''having having'''子句的需要。 – Anand

+0

设置[坏习惯踢 - 把NOLOCK无处不在](http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - 它是*不推荐*到处使用 - 完全相反! –

回答

2

这看起来像sql-server给我。

使用dateadd()sysutcdatetime()

select count(*) 
from [dbo].[QueueAuditTrail] with(nolock) 
where queueenddatetime >= dateadd(minute,-20,sysutcdatetime()) 
    and queueenddatetime < sysutcdatetime() 
    and queuetype = 7 
group by queuetype 
having count(queuetype) < 100000 
; 
+0

这两个参数正是我所需要的。感谢您的输入! –

+0

@ B.Jice高兴地帮忙! – SqlZim