2017-03-16 7 views
2

지난 4 개월간의 데이터를 Laravel에서 필터링하려고합니다.최근 n 개월간 데이터 그룹 가져 오기 - Laravel

$analytics = 
     Data::select([ 
      DB::raw('WEEK(p_date_time) AS week'), 
      DB::raw('COUNT(id) AS count'), 
     ]) 
      ->where('p_id', $p_id) 
      ->where('p_date_time', '>=', Carbon::now()->subMonth(4)) 
      ->groupBy('week') 
      ->orderBy('week') 
      ->get() 
      ->toArray(); 

이 코드는 나에게 1 년 전체에 대한 데이터를 기반으로 52 개 결과를 제공합니다 (I가 WEEK를 사용하고 현재) : 이것은 내가 현재 가지고 코드입니다. 그러나 지난 4 개월 동안 약 17 건의 결과가 필요합니다.

매일 수집 한 다음 지난 4 개월 동안 7 일 데이터를 청크로 추가하여이를 수행 할 수 있지만 쿼리만으로 어떻게 처리 할 수 ​​있습니까?

감사합니다.

+0

코드가 잘되어야합니다. 4 개월 전의 데이터를 반환합니다. 나는 귀하의 쿼리를 테스트하고 그 결과를 기대 반환합니다. 귀하의 예에서 귀하의 반환 배열을 제공 할 수 있습니까? 'p_date_time'이 데이터베이스의'date' 또는'timestamp' 형식입니까? – martiendt

+0

@martiendt, 현재 p_date_time이 (가) 있으며 다른 쿼리에 대한 데이터를 성공적으로 반환합니다. 이 데이터는 내가 받고있는 데이터입니다. [{ "week": 1, "count": 1}, { "week": 2, "count": 1}, { "week": 3, "count": 12, { "week": 8, "count": 14}, { "week": 9, "count": 274}, { "week": 46, "count": 2} 47, "count": 2}, { "week": 48, "count": 1}, { "week": 49, "count": 3}, { "week": 50, "count": 3} , { "week": 51, "count": 2}, { "week": 52, "count": 3}] 나는 혼란 스럽다. 일반적으로 WEEK는 지난 1 년간의 데이터를 반환합니다. 하지만 Carbon :: now() -> subMonth (4)에 의해 4 개월의 시간 제한을 설정했습니다. 그런 다음 17 주보다 오래된 데이터를 어떻게 반환합니까? –

+0

흠, 더 많은 디버그가 필요하다고 생각합니다. DB :: raw ('WEEK (p_date_time) AS week')'를 제거하려고합니다. 그러면 선택한 날짜를 분명히 볼 수 있습니다. – martiendt

답변

0

Carbon 쿼리의 오타 일 수도 있습니다. subMonth(4)subMonths(4)으로 변경하십시오. 's'와 함께.

+0

subMonth) 또는 subMonths (4), –

관련 문제