可以說我有一個包含20個條目的表。它們按日期排序(日期是列名> _>),並按降序排列。我將如何去選擇最新的條目和第15條最古老的條目?在單個查詢中選擇兩個特定的mysql錶行
我做下面的查詢
SELECT * FROM mytable m WHERE col1 = "zzz" ORDER BY date DESC LIMIT 15;
可以說我有一個包含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:
加括號
只有一個ORDER BY使用UNION時,允許... – 2010-05-11 22:03:22
你是對的,但括號,我只是添加它的工作原理 - 剛剛試了一下 – marianboda 2010-05-11 22:17:06
我相信你只能做這兩個查詢,除非你做一些工會選擇魔法。 LIMIT 1和限價1.15 – Robus 2010-05-11 21:59:36