我有一個計劃表,我可以使用recurring_id數據將某些事件分組爲相同的事件。問題是我需要在由recurring_id分組的事件列表中只獲取一個事件(最近的一個),但是如果recurring_id是0,我只需要列表,最多5個元素。事件表:以更簡單的方式獲取每個組的最近元素(最新元素)
+----+---------------------+---------------+
| id | start | recurrence_id |
+----+---------------------+---------------+
| 1 | 2013-10-03 03:30:00 | 0 |
| 2 | 2013-10-04 03:30:00 | 0 |
| 3 | 2013-10-05 03:30:00 | 1 |
| 4 | 2013-10-12 03:30:00 | 1 |
| 5 | 2013-10-19 03:30:00 | 1 |
| 6 | 2013-10-26 03:30:00 | 1 |
| 7 | 2013-10-13 03:30:00 | 2 |
| 8 | 2013-10-06 03:30:00 | 2 |
+----+---------------------+---------------+
而且我有這個查詢(假設當前日期是2013-10-03T21:18:10 + 00:00)
SELECT * FROM
((
SELECT * FROM events e JOIN
(
SELECT recurrence_id, MIN(start) start FROM events
WHERE recurrence_id <> 0
AND start > '2013-10-03T21:18:10+00:00'
GROUP BY recurrence_id
) subq USING (recurrence_id, start)
ORDER BY start ASC
LIMIT 5
) UNION (
SELECT * FROM events e
WHERE start > '2013-10-03T21:18:10+00:00'
AND recurrence_id = 0
ORDER BY start ASC
LIMIT 5
)) sq
ORDER BY start ASC
LIMIT 5
它的工作,但我覺得我過複雜的話,也變得非常困難,以創建工作指標:S
預計輸出繼電器將是:
+----+---------------------+---------------+
| id | start | recurrence_id |
+----+---------------------+---------------+
| 2 | 2013-10-04 03:30:00 | 0 |
| 3 | 2013-10-05 03:30:00 | 1 |
| 8 | 2013-10-06 03:30:00 | 2 |
+----+---------------------+---------------+
你能發表您的預期輸出基於樣本數據?謝謝。我知道你每組需要一個,但是對於組0,你需要排名前5位。 –
是的,這是正確的,每組需要1個,最多5個問題是我還需要它按時間排序,而且更新的是「現在」。 –