SQL - как выбрать последние 5 значений независимо от записей - PullRequest
0 голосов
/ 30 августа 2018

Мне нужно разбить записи, поэтому у меня есть последние 5 значений каждого поля, исключая нули и пробелы. ожидаемый результат даст таблицу как таковую:

  1. HT | WT | ИМТ | BP | HR | RR
  2. 72 | 148 | 20.07 | 120/70 | 68 | 16
  3. 72 | 152 | 20,61 | 120/80 | 68 | 16
  4. 72 | 154 | 20,88 | 120/68 | 70 | 16
  5. ...

    вот примерный набор данных, упорядоченный уже по дате. enter image description here

1 Ответ

0 голосов
/ 30 августа 2018

Таблицы 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;

? для столбца, который определяет порядок.

...