Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL删除每分钟添加的所有行,但只保留1行_Php_Mysql_Sql_Datetime_Pdo - Fatal编程技术网

Php MySQL删除每分钟添加的所有行,但只保留1行

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:

我有一个名为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: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可能会工作/