gpt4 book ai didi

Mysql,检索超过X天的记录

转载 作者:行者123 更新时间:2023-11-29 07:15:08 25 4
gpt4 key购买 nike

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

记录[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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com