что по этому поводу?
SELECT T1.f1 as "date 1", T2.f1 as "date 2", T3.f1 as "date 3"
FROM (SELECT *
FROM `date_test`
ORDER BY `f1` DESC
LIMIT 1) AS T1,
(SELECT *
FROM `date_test`
ORDER BY `f1` DESC
LIMIT 1, 1) AS T2,
(SELECT *
FROM `date_test`
ORDER BY `f1` DESC
LIMIT 2, 1) AS T3
;
Какие выходы:
+------------+------------+------------+
| date 1 | date 2 | date 3 |
+------------+------------+------------+
| 2003-01-01 | 2002-01-01 | 2001-01-01 |
+------------+------------+------------+
Единственным недостатком является то, что вам нужно, по крайней мере три строки, в противном случае он не будет ничего возвращать ...
Используя JOIN
, вы можете сделать это :
SELECT T1.id,
T1.f1 as "date 1",
T2.f1 as "date 2",
T3.f1 as "date 3"
FROM `date_test` as T1
LEFT JOIN (SELECT * FROM `date_test` ORDER BY `f1` DESC) as T2 ON (T1.id=T2.id AND T1.f1 != T2.f1)
LEFT JOIN (SELECT * FROM `date_test` ORDER BY `f1` DESC) as T3 ON (T1.id=T3.id AND T2.f1 != T3.f1 AND T1.f1 != T3.f1)
GROUP BY T1.id
ORDER BY T1.id ASC, T1.f1 DESC
Что вернет что-то вроде:
+----+------------+------------+------------+
| id | date 1 | date 2 | date 3 |
+----+------------+------------+------------+
| 1 | 2001-01-01 | 2003-01-01 | 2002-01-01 |
+----+------------+------------+------------+
Недостатком является то, что date1
, date 2
и date 3
не обязательно будут в определенном порядке (в соответствии с приведенным выше примером вывода). Но это может быть достигнуто программно. Плюсом является то, что вы можете вставить предложение WHERE
до GROUP BY
, и вы можете искать, например, T1.id
.
Почему это должно быть все в одной строке? Было бы намного проще иметь только один столбец. –
Я думаю, что более разумно возвращать их в виде строк, а не 1 строку с несколькими столбцами. – dotariel
Вам нужны три последних даты для каждого идентификатора? (Я заметил, что ваш идентификатор всегда 1) –