在单个查询中选择两个特定的mysql表行
问题描述:
可以说我有一个包含20个条目的表。它们按日期排序(日期是列名> _>),并按降序排列。我将如何去选择最新的条目和第15条最古老的条目?在单个查询中选择两个特定的mysql表行
我做下面的查询
SELECT * FROM mytable m WHERE col1 = "zzz" ORDER BY date DESC LIMIT 15;
答
用途:
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)
答
您可能需要使用两个的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
我相信你只能做这两个查询,除非你做一些工会选择魔法。 LIMIT 1和限价1.15 – Robus 2010-05-11 21:59:36