2016-12-01 2 views
1

Допуская Я ищу с входными переменными: $ от: 01-01-2016 $ до: 03-12-2016Laravel запросов к группе двумя разными датами

Вот моя текущая таблица в таблице: (outreach_links)

created_at start_date  status 
--------------------------------- 
2016-12-01 2016-01-01 A 
2016-12-02 2016-02-01 A 
2016-12-03 2016-03-01 A 
2016-12-03 2016-04-01 A 
2016-12-03  NULL  P 
2016-12-03  NULL  P 
2016-12-03  NULL  P 

Я хотел бы, чтобы такой вывод после запроса >>

Month   P  A 
--------------------------- 
Jan/2016  0  1 
Feb/2016  0  1 
March/2016  0  1 
April/2016  0  1 
Dec/2016  3  0 

Логика заключается в том, что я хочу группировать Status = "P" by created_at И я хочу сгруппировать Status = "A" по start_date? как я могу выполнить это в запросе?

Вот мой текущий Laravel 5,2 запроса:

DB::select(
    DB::raw('select 
     sum(case when outreach_links.status="P" and outreach_links.created_at >= ? and outreach_links.created_at <=? then 1 else 0 end) as pp, 
     sum(case when outreach_links.status="A" and outreach_links.start_date >= ? and outreach_links.start_date <=? then 1 else 0 end) as aa, 
     sum(case when outreach_links.status="A" then outreach_links.cost else 0 end) as cc, 
     MONTH(outreach_links.created_at) month, 
     MONTHNAME(outreach_links.created_at) month_name, 
     YEAR(outreach_links.created_at) year from outreach 
     inner join outreach_links on outreach.id = outreach_links.outreach_id 
     where outreach.profile_id=? 
     group by month, year'), 
    [$from, $to, $from, $to, $pro_id] 
); 

выход для этого, так как я группирования по формуле (created_at) только неправильно:

Month   P  A 
    --------------------------- 
    Dec/2016  3  4 

Вот выход мой запрос, когда я делаю >> var_dump();

array(1) { 
    [0]=> 
    object(stdClass)#369 (6) { 
    ["pp"]=> 
    string(1) "3" 
    ["aa"]=> 
    string(1) "4" 
    ["cc"]=> 
    string(4) "0.00" 
    ["month"]=> 
    string(2) "12" 
    ["month_name"]=> 
    string(8) "December" 
    ["year"]=> 
    string(4) "2016" 
    } 
} 

Помогите мне изменить запрос?

Благодаря

+0

любая другая помощь plz? – user3150060

ответ

1

Это сделать работу:

select concat(monthname(date), '/', year) as Month, 
(select count(*) from test where year(created_at) = year and month(created_at) = month and status = 'P') as P, 
(select count(*) from test where year(start_at) = year and month(start_at) = month and status = 'A') as A 
from 
(select year(created_at) as year, month(created_at) as month, created_at as date 
from test where created_at >= ? and created_at <= ? 
union 
select year(start_at) as year, month(start_at) as month, start_at as date 
from test where start_at >= ? and start_at <= ?) t1 
group by year, month 
order by date 

В основном, это UNIONs все даты из этой таблицы и делает group by на вершине этого.

Адрес SQL Fiddle.

+0

есть ли у меня внутреннее соединение другой таблицы с этим запросом ?? – user3150060

+0

где дата $ from и $ для ввода? – user3150060

+0

его не работает, потому что переменные $ from и $ to являются переменными, и они могут измениться, как я могу добавить их, чтобы заставить работать – user3150060

Смежные вопросы