在单个查询中选择两个特定的mysql表行

问题描述:

可以说我有一个包含20个条目的表。它们按日期排序(日期是列名> _>),并按降序排列。我将如何去选择最新的条目和第15条最古老的条目?在单个查询中选择两个特定的mysql表行

我做下面的查询

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

我相信你只能做这两个查询,除非你做一些工会选择魔法。 LIMIT 1和限价1.15 – Robus 2010-05-11 21:59:36

用途:

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) 
+0

嗯,我得到“未知表'a'“ – smont 2010-05-11 22:31:10

+0

@Scotta:糟糕 - 更正了表别名错字。 – 2010-05-11 22:34:51

+0

啊,非常感谢! – smont 2010-05-11 22:37:41

您可能需要使用两个的SELECT

联盟获得所有15个结果
(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) 

UPDATE:

加括号

+0

只有一个ORDER BY使用UNION时,允许... – 2010-05-11 22:03:22

+0

你是对的,但括号,我只是添加它的工作原理 - 刚刚试了一下 – marianboda 2010-05-11 22:17:06