Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak używać GROUP BY i ORDER BY razem w LARAVEL 5.6?

Użyj połączenia podzapytania:

$days = 10 ;
$currencies = Currency::with(
    [
        'exchangeRate' => function ($q) use ($days) {
            $latest = CurrencyExchangeRate::select('currency_id', 'date')
                ->selectRaw('MAX(created_at) created_at')
                ->groupBy('currency_id', 'date');
            $q->joinSub($latest, 'latest', function($join) {
                $join->on('currency_exchange_rates.currency_id', 'latest.currency_id')
                    ->on('currency_exchange_rates.date', 'latest.date')
                    ->on('currency_exchange_rates.created_at', 'latest.created_at');
            })->where('currency_exchange_rates.created_at', ">", strtotime('-' . $days . ' days', time()));
        }
    ]
)->get();

Spowoduje to wykonanie następującego zapytania:

select *
from `currency_exchange_rates`
inner join (
  select `currency_id`, `date`, MAX(created_at) created_at
  from `currency_exchange_rates`
  group by `currency_id`, `date`
) as `latest`
on `currency_exchange_rates`.`currency_id` = `latest`.`currency_id`
  and `currency_exchange_rates`.`date` = `latest`.`date`
  and `currency_exchange_rates`.`created_at` = `latest`.`created_at`
where `currency_exchange_rates`.`currency_id` in (?, ...)
  and `currency_exchange_rates`.`created_at` > ?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SELECT INTO OUTFILE odmowa uprawnień, ale użytkownik może pisać do katalogu

  2. Jak połączyć bazę danych mysql z Dart?

  3. MySQL InnoDB blokuje tylko dotknięte wiersze?

  4. Połączenie bez DSN z serwerem mysql w dostępie ms bez zapamiętywania nazwy użytkownika i hasła

  5. MySql PHP wybierz liczbę odrębnych wartości z danych oddzielonych przecinkami (tagi)