我有一个查询,用于选择从当前时间过去1小时创建的记录。
select ts from <table_name> where ts >= DATE_SUB(NOW(), interval 1 hour);
我也可以使用
在7天前选择日期 select count(*) from <table_name> where ts >= DATE_SUB(NOW(), interval 7 day)
;
如何使用这两个日期功能在今天开始的7天之前和从当前时间开始的1小时之前获取记录。
例如,如果现在的时间是2015-11-06 10:03:00那我怎样才能获得2015-10-30 09:03:00到2015-10-30 10:03之间的时间数据: 00
我尝试过类似的东西,但它会出现语法错误:
select ts from <table_name> where ts >= DATE_SUB(DATE(NOW()), INTERVAL 7 DAY), interval 1 hour)
select ts from <table_name> where ts >= DATE_SUB(NOW(), INTERVAL 7 DAY), interval 1 hour)
答案 0 :(得分:4)
您的示例有语法错误(括号)
太多)。如果您想使用DATE_SUB()
,则需要使用它两次。要在一次和另一次之间获取条目,请使用WHERE ... BETWEEN ... AND ...
您可以使用:
SELECT ts
FROM iv_split_skill_metrics
WHERE ts BETWEEN
DATE_SUB(
DATE_SUB(DATE(NOW()), INTERVAL 7 DAY),
interval 1 hour)
AND
DATE_SUB(DATE(NOW()), INTERVAL 7 DAY)
或者,更好的是,完全跳过DATE_SUB()
并进行减法,如下所示:
SELECT ts
FROM iv_split_skill_metrics
WHERE ts BETWEEN NOW() - INTERVAL 7 DAY - INTERVAL 1 HOUR
AND NOW() - INTERVAL 7 DAY
修改: 出于某种原因,我在发布此问题后对您的问题进行了修改,并在您的问题中将iv_split_skill_metrics
替换为<table_name>
,但是以上例子无论如何都会有用当然,只需使用正确的表名和列名!
编辑2: 我现在看到您希望在7天加1小时前和7天前输入。我已经调整了我的答案,告诉你如何做到这一点。
答案 1 :(得分:1)
你的目标不是100%明确,而只是我的尝试:
SELECT ts
FROM table_name
WHERE ts >= DATE_ADD(DATE_ADD(NOW(), INTERVAL -7 DAY), INTERVAL -1 HOUR)
AND ts <= DATE_ADD(NOW(), INTERVAL -7 DAY);
但从表单性能角度来看,此查询会更快:
http://sqlfiddle.com/#!9/9edd1/2
SET @end = DATE_ADD(NOW(), INTERVAL -7 DAY);
SET @start = DATE_ADD(@end, INTERVAL -1 HOUR);
SELECT ts
FROM table_name
WHERE ts BETWEEN @start AND @end;