mysql последние 5 записей в статусе подсчета - PullRequest
0 голосов
/ 06 мая 2020

таблица бронирования

id    status
1     booked
1     booked
3     cancelled
2     cancelled
2     booked
1     cancelled
1     cancelled
1     booked
select id, count(status) as tot_cancel 
from tbl_booking 
where id=1 and status='cancelled';

результат будет

id    tot_cancel
1     2

НО МНЕ НУЖНЫ последние 5 записей с идентификатором пользователя = 1 и отмененное количество, а не общая запись в таблице отменена

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Вы можете выполнить условную агрегацию с предложением limit:

select 1 as id, sum(status = 'cancelled')
from table t
where id = 1
order by ? -- use ordering column instead ?
limit 5;

Вы можете использовать коррелированный подзапрос для всех id s:

select t.id, sum(t.status = 'cancelled')
from table t
where t.? in (select t1.? 
              from table t1 
              where t1.id = t.id 
              order by t1.? 
              limit 5
             )
group by t.id;
0 голосов
/ 06 мая 2020

Я понимаю, что вам нужно подсчитать количество отмененных записей для последних 5 записей пользователя 1. Это возможно, но вам нужен столбец, определяющий порядок строк, поэтому однозначно, какие записи последними. .

Предполагая, что такой столбец существует в вашей таблице и называется ordering_id, вы можете сделать:

select sum(status = 'cancelled') no_cancelled
from (select status from mytable where id = 1 order by ordering_id desc limit 5) t
...