Я ищу красноречивый оператор, который даст мне максимальную отметку времени (timeestamp) для каждого room_id, учитывая, что все значения временной метки старше 15 дней для этого room_id. (По существу, любой номер, который не был очищен в течение последних 15 дней ...)Laravel eloquent comb max() и где() или having()
maintenancelog
+----+-------------------+---------+---------------------+
| id | maintenance_value | room_id | timestamp |
+----+-------------------+---------+---------------------+
| 1 | Cleaned | 1 | 2015-09-06 00:54:59 |
| 2 | Cleaned | 1 | 2015-09-07 01:55:59 |
| 3 | Cleaned | 2 | 2015-09-06 02:56:59 |
| 4 | Cleaned | 2 | 2015-09-16 03:57:59 |
| 5 | Cleaned | 3 | 2015-09-06 04:58:59 |
| 6 | Cleaned | 3 | 2015-09-07 05:59:59 |
+----+-------------------+---------+---------------------+
я сосу с MySQL, но это было бы эквивалентно инструкции Oracle из .. .
select room_id,max(timestamp) from maintenancelog
group by room_id
having max(timestamp) < sysdate - 15;
Вкратце заявление должно в основном привести следующее.
1, 2015-09-07 01:55:59
3, 2015-09-07 05:59:59
Я пытался ...
$dt = Carbon::now();
$checkdate = $dt->subDays(15);
return $this->groupBy('room_id')->max('timestamp')->having('timestamp','<',$checkdate);
но получить
Call to a member function having() on string
пытается ...
return $this->groupBy('room_id')->havingRaw("max(timestamp)<sysdate()-15");
просто возвращает все строки, где временная отметка старше 15, игнорируя другие максимальные значения ...