Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
MySQL-检索除最新记录外所有超过12个月的记录_Mysql_Sql - Fatal编程技术网

MySQL-检索除最新记录外所有超过12个月的记录

MySQL-检索除最新记录外所有超过12个月的记录,mysql,sql,Mysql,Sql,我需要在MySQL中编写一个查询,从Downloads表中检索每个唯一参考号Ref的Downloads_at字段早于12个月的所有行,该数据集中最近的一行除外。因此,它必须按照参考号Ref而不是Id进行分组。下载表大致如下所示: *---Id---Ref----下载地址-----文件名---* 1 4WP 2009-08-14 10:13:58 test.txt 2 3K8 2009-05-21 11:11:10 test2.txt 3

我需要在MySQL中编写一个查询,从Downloads表中检索每个唯一参考号Ref的Downloads_at字段早于12个月的所有行,该数据集中最近的一行除外。因此,它必须按照参考号Ref而不是Id进行分组。下载表大致如下所示:

*---Id---Ref----下载地址-----文件名---*

  1      4WP    2009-08-14 10:13:58    test.txt
  2      3K8    2009-05-21 11:11:10    test2.txt
  3      3K8    2011-12-12 08:12:09    test3.txt
例如,存在ref ABC的下载,下载时间戳为01Dec12 8.30、01Dec12 9.30、01Dec12 10.30。那么01Dec12 10.30记录不应该出现在查询中,因为它是最新的记录

我想如果我是通过Id而不是Ref来分组以获得结果,那么编写查询将是一件容易的事情,但就目前而言,我有点挣扎。到目前为止,我有这个查询,理论上应该返回正确的结果,但在我的测试数据库上花费的时间太长了——超过400秒,我才取消并放弃它

SELECT * FROM downloads 
WHERE Downloaded_At < DATE_SUB(NOW(), INTERVAL 1 YEAR)
    AND Id NOT IN 
       (SELECT Id FROM downloads INNER JOIN (select Id, Ref, MAX(Downloaded_At) 
        FROM downloads
        WHERE Downloaded_At < DATE_SUB(NOW(), INTERVAL 1 YEAR)
        GROUP BY Ref) dl on dl.id = downloads.id);

有谁能建议一种更好/更有效的方法来获得我想要的结果吗?

如果我理解正确,您希望为每个参考筛选最新的下载记录。我认为您的查询无法做到这一点

SELECT *
FROM downloads d
WHERE Downloaded_At < DATE_SUB(NOW(), INTERVAL 1 YEAR) and
      Downloaded_At < (SELECT max(Downloaded_At)
                       FROM downloads d2
                       WHERE d2.ref = d.ref
                      );

这个查询在下载时会运行得更快。如果在下载时有索引,则下载时间为。

是的,我再次查看了我的查询,发现它不会返回我想要的内容。你的问题很完美。