Mysql,检索超过X天的记录

标签 mysql

这是一个存储日志/事件的表:

记录[id、日期、时间]

我想通过引用最旧的(第一个插入的)来检索超过 X 天的记录

类似这样的:

SELECT * FROM log
WHERE 
(date BETWEEN MIN(date) AND DATE_ADD(MIN(date), INTERVAL X DAY))
GROUP BY date
ORDER BY date, Time

更新: 虽然我提出了一个 SELECT 案例的问题,但实际情况是我需要删除记录(DELETE)。认为它是相同的(我错了),事实是它不能使用同一个表上的嵌套 SELECT 执行 DELETE。 (并且有感觉)。

看到最后很复杂,需要不止一句话,最后我考虑将代码分成两个查询,第一个查询获取第一个插入元素的日期,第二个查询清除。

$sql1 = "SELECT MIN(date) as MinDate FROM `log`";

// Execute the query and gets the result row using whatever database driver[..]
$minDate = $rowQuery["MinDate"]

$sql2 = "DELETE FROM `log` WHERE Date > DATE_ADD('".$minDate."', INTERVAL ".$days." DAY)";

谢谢。

最佳答案

如果你聚合函数,你应该使用having而不是where

SELECT * FROM log
where date in (select date from log 
         having date BETWEEN Min(date) AND DATE_ADD(date, INTERVAL X DAY))
GROUP BY date) 
ORDER BY date, time

但是对于选择来说这更好

SELECT * FROM `log`
where DateF  BETWEEN (select min(DateF) from `log`) 
            AND DATE_ADD((select min(DateF) from `log`), INTERVAL 2 DAY)
ORDER BY DateF, TimeF

http://sqlfiddle.com/#!9/85d9f0/4

事实上,不可能使用子选择删除表,您可以使用临时表 创建表 temp_log ( dateF datetime(6));

insert in temp_log 
select DateF FROM `log`
             where DateF  BETWEEN (select min(DateF) from `log`) 
             AND DATE_ADD((select min(DateF) from `log`)

delete from  `log` as a
inner join temp_log  t on  t.DateF = a.DateF;


drop table temp_log ;

关于Mysql,检索超过X天的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38230447/

相关文章:

mysql - mysql无法插入汉字

php - 在php/mysql中只显示类别的子数据

mysql - sql中的四分位数查询

mysql - 匹配时间戳之间的最小差异

mysql - 根据行在表中的位置删除行

mysql 工作台。如果我有模型,如何创建数据库

mysql - 优化group by order by

php - MySQL select 语句无法正常工作

Java mysql,使用PreparedStatement的简单更新有语法错误

mysql - 现有 mysql 表或单独表中的附加字段