【问题标题】:Selecting two specific mysql table rows in a single query在单个查询中选择两个特定的 mysql 表行
【发布时间】:2010-05-11 21:57:07
【问题描述】:

假设我有一个包含 20 个条目的表。它们按日期降序排列(日期是列名>_>)。我将如何只选择最新的条目和第 15 个最旧的条目?

我通过执行以下查询得到所有 15 个结果

SELECT * FROM mytable m WHERE col1 = "zzz" ORDER BY date DESC LIMIT 15;

【问题讨论】:

  • 我相信你只能在两个查询中做到这一点,除非你做了一些联合选择魔法。限制 1 和限制 1,15

标签: mysql


【解决方案1】:

用途:

SELECT x.*
  FROM (SELECT a.*,
               @rownum := @rownum + 1 AS rank
          FROM mytable a 
          JOIN (SELECT @rownum := 0) r
         WHERE a.col1 = "zzz" 
      ORDER BY a.date DESC) x
 WHERE x.rank IN (1, 15)

【讨论】:

  • 嗯,我收到“未知表 'a'”
【解决方案2】:

您可能需要使用两个 SELECT 的 UNION

(SELECT * FROM mytable m WHERE col1 = "zzz" ORDER BY date LIMIT 1, 15)
UNION
(SELECT * FROM mytable m WHERE col1 = "zzz" ORDER BY date DESC LIMIT 1)

更新:

加括号

【讨论】:

  • 你是对的,但是我刚刚添加的括号是有效的 - 只是尝试过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
相关资源
最近更新 更多