Таблицы SQL представляют неупорядоченные наборы. Там нет такой вещи, как последние пять строк, если столбец не предоставляет эту информацию. Позвольте мне предположить, что у вас есть такой столбец.
Это то, что вы хотите?
select t.*
from t
where ht is not null and wt is not null and bmi is not null
order by ? desc
limit 5;
Делает ли это то, что вы хотите?
EDIT:
Я думаю, что неправильно понял вопрос. Кажется, вы хотите каждый столбец независимо. Для этого я думаю, что union all
и group by
могут быть уместны:
select max(ht) as ht,
max(wt) as wt,
max(bmi) as bmi,
. . .
from ((select (@rnh := @rnh + 1) as rn, ht, null as wt, null as bmi, . . .
from t cross join (select @rnh := 0) params
where ht is not null
order by ? desc
limit 5
) union all
(select (@rnw := @rnw + 1) as rn, null, wt, null as bmi, . . .
from t cross join (select @rnw := 0) params
where wt is not null
order by ? desc
limit 5
) union all
(select (@rnb := @rnb + 1) as rn, null as ht, null as wt, bmi, . . .
from t cross join (select @rnb := 0) params
where ht is not null
order by ? desc
limit 5
) union all
. . .
) x
group by rn;
?
для столбца, который определяет порядок.