【问题标题】:MySQL get records without last recordMySQL获取没有最后一条记录的记录
【发布时间】:2015-04-19 14:02:44
【问题描述】:

我正在编写一个查询以从 MySQL 表中获取记录,如下所示。

SELECT * FROM alerts

我有这个列 id 是主要的并且自动递增

id,host,domain,alert_time

但我需要获取没有该表最后一条记录的记录,任何人都知道如何为此编写 MySQL 查询。谢谢你

【问题讨论】:

  • SQL 表表示无序集。除非另一列指定排序,否则没有“最后”记录(或“第一”记录或“第二”记录)的概念。你有这样的专栏吗?提出问题时,您应该包括样本数据和期望的结果。
  • 我有一个名为 id 的主键,它是自动递增的
  • 同意@GordonLinoff。除非“最后记录”的确切含义被定义,否则这个问题是不清楚的,并且会导致基于不同解释的不同答案。
  • ^ @BeingSunny 之前没有发现 :)

标签: php mysql


【解决方案1】:

尝试以这种方式获取id 列的MAX 值,然后选择除它之外的所有行。

SELECT * FROM alerts WHERE ID != (SELECT MAX(ID) FROM alerts)

【讨论】:

  • 怎么知道最后一行的ID最高?
  • 因为它的自动增量
  • 如果您的表没有任何自动增量字段,请创建一个列 id 并使其自动增量
【解决方案2】:

另一种方法是:

SELECT *
FROM alerts a
ORDER BY id DESC
LIMIT 1,99999999

我更喜欢 Manish 的回答来删除最大的 id,但在某些情况下这样做是合适的。例如,如果您想要除最近的三个记录之外的所有记录,则使用此方法更容易。

(注意:99999999 只是获取其余行的一个大数字。)

【讨论】:

  • @Gordon Linoff,先生,您能解释一下我的意思是LIMIT 1,99999999 的大数字吗?
  • @BeingSunny 。 . .我以为我做到了。 1 是偏移量。这从 0 开始,因此“1”表示跳过第一行。 99999999 是要获取的行数。较大的数字足以获取其余的行。你必须在那里放一个常数,所以它只是一个很大的数字。
  • @ Gordon Linoff,OMG,我在您的查询中错过了ORDER BY id DESC,这就是为什么我对limit 1,99999999 有点困惑。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2019-12-28
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 2023-03-16
  • 2017-05-08
  • 2012-01-23
相关资源
最近更新 更多