Php MySQL删除每分钟添加的所有行,但只保留1行
我有一个名为datas的MySQL表和如下列:Php MySQL删除每分钟添加的所有行,但只保留1行,php,mysql,sql,datetime,pdo,Php,Mysql,Sql,Datetime,Pdo,我有一个名为datas的MySQL表和如下列: id int(11) currency varchar(16) date_time (datetime) 示例数据: id currency date_time --------- ------------ --------------------- 12 EURUSD 2019-01-28 11:19:26 13 EURUSD 2019-01-28 11:
id int(11)
currency varchar(16)
date_time (datetime)
示例数据:
id currency date_time
--------- ------------ ---------------------
12 EURUSD 2019-01-28 11:19:26
13 EURUSD 2019-01-28 11:19:29
14 EURUSD 2019-01-28 11:19:34
15 EURUSD 2019-01-28 11:19:38
16 EURUSD 2019-01-28 11:19:49
17 GBPUSD 2019-01-28 11:19:23
18 GBPUSD 2019-01-28 11:19:27
19 GBPUSD 2019-01-28 11:19:39
20 GBPUSD 2019-01-28 11:19:45
21 GBPUSD 2019-01-28 11:19:57
必须像这样在一分钟内删除另一行每种货币中只有一行:
12 EURUSD 2019-01-28 11:19:26
17 GBPUSD 2019-01-28 11:19:23
我的程序大约每3-6秒插入一行。但是我想在一分钟内只保留一个货币价格,我想删除其他货币价格
我如何使用MySQL查询呢?我正在使用PHP
我的cron作业每15分钟工作一次。使用php将处理此查询
MySQL版本=5.7.25您可以在下面尝试-
delete b from datas b join
(
SELECT
@row_number:=CASE
WHEN @currency = currency THEN @row_number + 1
ELSE 1
END AS num,id
@currency:=currency as currency,date_time
FROM
datas,(SELECT @currency:=0,@row_number:=0) as t
ORDER BY currency
)A on a.id=b.id where num<>1
如果您喜欢按分钟和货币分组,可以在最小id或最大id中使用NOT
delete from my_table
where id NOT IN (
select my_id
from (
select min(id) my_id
from my_table
GROUP BY currency
, YEAR(date_time)
, month(date_time)
, day(date_time)
, HOUR(date_time)
, MINUTE(date_time)
) T
)
您可以使用以下选项:
从t中删除
其中货币、日期和时间不在
从中选择*
选择货币、日期和时间
从t
按货币分组,UNIX\u时间戳日期\u时间-UNIX\u时间戳日期\u时间%1*60
AS x
表达式UNIX_TIMESTAMPdatetime-UNIX_TIMESTAMPdatetime%n*60将把日期时间值限定为n*60秒边界。您可以按此表达式分组,以在每个组中查找货币、MINdatetime对。您的mysql是什么version@fa06mysql版本5.7.25datas听起来像是一个糟糕的表名。到目前为止,您做了什么?您是否考虑过在currency和yyyy-mm-dd-HH:mm上使用左连接对每种货币进行插入,其中没有匹配项?那么每分钟每种货币只有一条记录;查看与您的MySQL服务器版本对应的手册,了解在“SELECT@row\u number:=CASE WHEN@重试时使用的正确语法。1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解可在“b join1064”附近使用的正确语法-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解使用“@currency:=currency as currency,date\u timereturns”附近的正确语法;1093-无法在FROM子句中指定要更新的目标表“my_table”已更新。。使用子查询强制执行临时表我测试了不要以所有货币删除。9351 2019-01-28 11:46:36 6.0173 GBP USD 9353 2019-01-28 11:46:38 6.0173 GBP USD您的查询有效并删除了许多行,但有些货币在db live OutputHanks man working之前每分钟添加多行!如果我想每5分钟删除一次,也是这样吗?我该如何使用?你能添加这个吗?所以你想为每个0-5、5-10、10-15分钟集保留第一行?你的日期时间是否包含毫秒?像这样2019-01-28 11:19:26标准日期时间没有测试,但按货币分组,UNIX\u TIMESTAMPdate\u time-UNIX\u TIMESTAMPdate\u time%5*60可能会工作/