Моя цель - захватить последние несколько строк (я пытаюсь три) из таблицы для каждой учетной записи. У меня нет проблем с получением первых строк, но у меня возникли проблемы с составлением первых трех последних строк. Например, предположим, что у меня есть следующая таблица:Как захватить последние три строки в MySQL
+--------+------------+------------+-----------+
| rownum | entryDate | particular | accountID |
+--------+------------+------------+-----------+
| 1 | 2015-10-01 | Item1 | 1 |
| 2 | 2015-10-01 | Item2 | 1 |
| 3 | 2015-10-02 | Item3 | 1 |
| 4 | 2015-10-02 | Item4 | 1 |
| 5 | 2015-10-02 | Item5 | 2 |
| 6 | 2015-10-03 | Item6 | 2 |
| 7 | 2015-10-05 | Item7 | 3 |
+--------+------------+------------+-----------+
То, что я пытаюсь получить это:
+--------+------------+------------+-----------+
| rownum | entryDate | particular | accountID |
+--------+------------+------------+-----------+
| 4 | 2015-10-02 | Item4 | 1 |
| 3 | 2015-10-02 | Item3 | 1 |
| 2 | 2015-10-01 | Item2 | 1 |
| 6 | 2015-10-03 | Item6 | 2 |
| 5 | 2015-10-02 | Item5 | 2 |
| 7 | 2015-10-05 | Item7 | 3 |
+--------+------------+------------+-----------+
Где Item1
был удален, потому что он уже 3 перед ним. Я пробовал следующий код, но он не извлекает самые последние
select rownum, entryDate, particular, accountID
from (
select entryDate, particular, accountID
@rownum := if(@account = accountID, @rownum + 1, 1) rownum,
@account := accountID
from entries
join (select @rownum := 0, @account := 0) init
order by accountID, entryDate desc) t
where t.rownum <= 3 -- Limits the rows per account
Если кто-то может мне точку в правильном направлении, что было бы здорово!
EDIT: Однако то, что я извлечения в качестве результата:
+--------+------------+------------+-----------+
| rownum | entryDate | particular | accountID |
+--------+------------+------------+-----------+
| 3 | 2015-10-02 | Item3 | 1 |
| 2 | 2015-10-01 | Item2 | 1 |
| 1 | 2015-10-01 | Item1 | 1 |
| 6 | 2015-10-03 | Item6 | 2 |
| 5 | 2015-10-02 | Item5 | 2 |
| 7 | 2015-10-05 | Item7 | 3 |
+--------+------------+------------+-----------+
Кроме того, если это поможет, я проверил это на MySQL Workbench, SQLbuddy, PHP (веб-приложения) и PHPMyAdmin, и все они производят одинаковый результат.
Почему существует запрос подбора? в чем его цель? –
Какой подзаголовок? Если вы имеете в виду тот, что находится внутри 'from', то это значит, что количество строк на одну учетную запись может быть ограничено до 3 на учетную запись. Подзапрос внутри соединения используется для инициализации переменных. – Jujunol
Ваш запрос действительно дает именно тот результат, который вы указали - в чем проблема? – amdixon