MySQL Выберите три самые последние записи для отчета
У меня есть отчеты, которые я запускаю, и храню результаты в таблице report_runs
:
run_id int(11), report_id int(11), report_run_date datetime
Эти отчеты могут иметь один или несколько прогонов. Я хотел бы получить три самых последних run_id
для каждого report_id
, Как run_id
с шагом, это должно быть выполнимо с любой из трех run_id
с для report_id
или по последним трем run_date
с, но я не уверен, как!
Я попробовал несколько вариантов этого:
SELECT group_concat(outerRuns.run_id),
outerRuns.report_id,
COUNT(innerRuns.id) AS runs
FROM report_runs outerRuns
INNER JOIN report_runs innerRuns
ON outerRuns.id = innerRuns.id
GROUP BY
outerRuns.report_id
HAVING runs > 3
Хотя это дает мне один run_id
и его счет проходит через его report_id
Я действительно не уверен, как получить полный список, а затем отфильтровать его до трех самых последних...
Отредактируйте запрос: добавлен group_concat для получения всех запусков, по-прежнему необходимо фильтровать только самые последние.
Набор результатов и запрос в настоящее время выглядят так:
SELECT outerRuns.report_id,
group_concat(outerRuns.id),
COUNT(innerRuns.id) AS runs
FROM report_runs outerRuns
INNER JOIN report_runs innerRuns
ON outerRuns.id = innerRuns.id
GROUP BY
outerRuns.report_id
HAVING runs > 3
,
| report_id | group_concat(innerRuns.id) | runs |
| 13 | 10,12,15,18,19,20,22 | 7 |
| 14 | 47,67,101,127,154,182,209,243,291,412,624,713,796,866,1622,1899,2173,2324,2474,2610,2760,2913,3068,3261,3453 | 25 |
| 15 | 9,16,17,48,68,102,128,155,252,316,448,668,737,808,1253,1357,1634,1775,1943,2080,2225,2368,2518,2656,2813,2964,3164,3359 | 28 |
| 16 | 11,14,29,50,70,77,91,116,143,170,197,232,295,413,638,712,790,862,1325,1623,1778,1949,2098,2256,2398,2544,2693,2842,2991,3211,3403,3580 | 32 |
| 17 | 21,28,46,65,75,106,133,160,188,230,262,336,672,742,814,1259,1359,1635,1773,1960,2104,2252,2395,2538,2667,2825,2947,2948,3078,3265,3458,3634 | 32 |