2010-05-11 102 views
0

可以說我有一個包含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

回答

2

用途:

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

0

您可能需要使用兩個的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