Количество из группы заказов по последнему статусу

#mysql #sql #laravel #eloquent #laravel-6

#mysql #sql #laravel #красноречивый #laravel-6

Вопрос:

Я хочу посчитать last_status из истории. Вот как выглядит таблица

 --------
p_table
--------
id
name

----------------
history_p_table
----------------
id
p_id (many to one p_table)
status_id (many to one status_table)
date_history
order_history

------------
status_table
------------
id
name
 

p_table hasMany history_table и history_table belongsto status_table
Я хочу получить все количество статусов из last_status (получить last_status, первый статус заказа по date_history DESC, order_history DESC и history.id DESC) история p_table (группа подсчета по last_status)

Я пробовал с SQL, но он все еще выдает ошибку

 SELECT 
    (SELECT status_id FROM history_p
    LEFT JOIN status_table ON status_table.id=history_p.status_id
    LEFT JOIN p ON history_p.p_id=p.id
    GROUP BY status_id, p_id
    ORDER BY date_history DESC, order_history DESC, history_p.id DESC) AS last_status,
    ss.*, COUNT(last_status) FROM status_table ss
    LEFT JOIN status_table su ON su.id=ss.id
    GROUP BY last_status
 

Вот это модель P

 class P extends Model{
  public function statusNow(){
        return $this->historyPs()
            ->orderBy('date_history','DESC')
            ->orderBy('order_history', 'DESC')
            ->orderBy('id', 'DESC')
            ->first();
  }

  public function historyPs()
  {
        return $this->hasMany(AppModelsHistoryP::class);
  }
}
 

Вот это модель HistoryP

 class HistoryP extends Model
{
    public function status()
    {
        return $this->belongsTo(AppModelsStatus::class);
    }

    public function p()
    {
        return $this->belongsTo(AppModelsP::class);
    }
}
 

Есть ли лучший способ сделать это? Мне нужно, чтобы это было красноречиво, но если нет способа и следует использовать необработанный запрос, это тоже не проблема
Вот это пример данных http://sqlfiddle.com /#!9/73709c

Мне нужно получить

 -------------------
Get Packet   | 2
Send to Cust | 0 
Send to P    | 10
Sent to Pab  | 1
-------------------
 

Комментарии:

1. можете ли вы предоставить модели, о которых идет речь

2. Либо создайте онлайн-скрипку, либо предоставьте CREATE TABLE INSERT INTO с некоторыми образцами данных и предоставьте желаемый результат для этих данных.

3. Спасибо за ваши рекомендации, вот это sql db-fiddle.com/f/pJZnKnsed4JqzVW7h3HnKh/1 . Нужна помощь @Strawberry