mysql - 使用 mysql 从某一行开始选择

标签 mysql select

如何从特定行开始选择?

比如我要查询的表,

pg_id   pg_title    pg_backdate
1       a           2012-09-18 13:32:49
2       b           2011-09-18 13:32:49
3       c           2011-06-18 13:32:49
4       d           2010-05-18 13:32:49
5       e           2009-04-18 13:32:49
6       f           2011-10-18 13:32:49
7       g           2012-04-18 13:32:49
8       h           2012-09-18 13:32:49
9       i           2012-10-18 13:32:49

我只想选择前 5 行,从当月和当年开始,我已经处理了下面的查询 - 它只选择当月和当年的前 5 行,而不是以后的行,

SELECT *
    FROM root_pages AS p

    WHERE DATE_FORMAT(p.pg_backdate, '%Y') = '2011'
    AND DATE_FORMAT(p.pg_backdate, '%m') = '09' 

    ORDER BY p.pg_backdate DESC

    LIMIT 5

理想情况下,它应该只返回这些行,

pg_id   pg_title    pg_backdate
1       a           2012-09-18 13:32:49
2       b           2011-09-18 13:32:49
6       f           2011-10-18 13:32:49
7       g           2012-04-18 13:32:49
8       h           2012-09-18 13:32:49

最佳答案

SELECT *
FROM root_pages AS p
WHERE p.pg_backdate >= '2011-09-01'
ORDER BY p.pg_backdate DESC
LIMIT 5

像你这样使用函数会扼杀 MySQL 使用索引的任何机会。

如果您想从当月中选择前 5 名,请执行以下操作:

SELECT *
FROM root_pages AS p
WHERE p.pg_backdate BETWEEN '2011-09-01' AND '2011-09-30'
ORDER BY p.pg_backdate DESC
LIMIT 5

如果你想要当月的前 5 名之后的行,那么做

  SELECT *
  FROM root_pages AS p
  WHERE p.pg_backdate BETWEEN '2011-09-01' AND '2011-09-30'
  ORDER BY p.pg_backdate DESC
  LIMIT 5
UNION ALL
  SELECT *
  FROM root_pages AS p
  WHERE p.pg_backdate > '2011-09-30'
  ORDER BY p.pg_backdate DESC

关于mysql - 使用 mysql 从某一行开始选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7499756/

相关文章:

Python SQL 从特定变量字段中选择行

在 Mathematica 中选择圆形区域内的点

sql - 如何将多个 select 语句插入临时表

MySQL - 从现有 .sql 文件运行脚本时遇到问题,该文件应创建架构、其表并在 Workbench 中插入所有必要的数据

php - SQL 语句/php 代码来处理一本书的许多作者

php - 使用 mysql 从 php 插入时出现问题

sql - 如何在 PostgreSQL 中使用 `SELECT` 获取当前数据库和用户名?

MySQL NATURAL JOIN 3 与父表相关的表,并且对父表有约束

MySQL 过程返回 0 行

java - 如何使用Java swing备份MySQL数据库中的单个表?