php - 根据内容中的日期获取最近 N 周的 MySQL 行

标签 php mysql sql date

我想根据表行中的日期从 MySQL 表中获取前 N 周的数据。

假设当前是第 30 周,我的行包含第 29、28、26 和 12 周的数据。

如果我想要基于今天的日期来获取最近两周的行,这很简单,但我希望它基于行上的时间戳。

因此,如果 N = 2,我想要第 29 周和第 28 周的所有行。如果 N = 3,我想要第 29、28 和 26 周,无论我获取它时是哪一周。

我可以使用 PHP 并根据估计输出进行猜测来完成此操作,但也许我可以利用一些 MySQL 功能。

最佳答案

一种方法是使用查询获取您想要返回的周集,然后将该查询用作您可以加入的内联 View 。

像这样:

SELECT t.*
  FROM (SELECT s.week FROM tab s GROUP BY s.week ORDER BY s.week DESC LIMIT 3) r
  JOIN tab t
    ON t.week = r.week

内联 View (别名为r)获取表中最近 N 个周值的列表。 (这假设周列是可排序的,就像它是整数一样。

它连接到表,使用 ON 子句将从表返回的行限制为具有与内联 View 返回的周值相匹配的周值的行。

注意:week 列上的索引可能会为大量行以及 week 上的高基数提供显着的性能优势> 栏目。

注意:对于大型表,执行 JOIN 操作与使用 IN(子查询) 谓词之间可能存在性能差异,如下例所示。对于大多数大型集合以及我所做的查询,我发现 JOIN 通常性能更好。但您可能想对两者进行测试,看看哪一个更适合您。 (在小表上,这两种方式都不重要;在真正的大表上,性能差异变得很显着。)

SELECT t.*
  FROM tab t
 WHERE t.week
    IN (SELECT s.week FROM tab s GROUP BY s.week ORDER BY s.week DESC LIMIT 3) r

关于php - 根据内容中的日期获取最近 N 周的 MySQL 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11908944/

相关文章:

php - 使用 php 和 mysql 显示带分页的搜索结果

mysql - 获取每条记录的计数mysql

php - mysql 查询返回空结果

来自字符串的 Javascript boolean 比较器

php - Mysql:将数据数组存储在单个列中

SQL Server 2008 DateTime范围查询

php - 在 PHP 中使用 CURL 将登录 POST 到远程 auth 函数/php 文件

php - 为发布方法获取不同的名称

php - 我可以显示没有扩展名的图像吗

PHP 生成 foreach 并将其生成为数组