У меня есть таблица Сделка со следующей колонкой и данныеMYSQL запрос, чтобы получить разницу дат
id transaction_date trans_type account_id agents_id transaction_date price miles
1 2012-02-08 Buy 1 1 2010-02-08 0.016 12000
2 2012-03-01 Sell 2 2 2012-03-10 0.256 -2000
3 2012-03-27 Buy 3 3 2012-03-27 0.256 10000
4 2012-03-28 Sell 4 4 2012-03-28 0.589 -11000
5 2012-03-29 Buy 5 5 2012-03-29 0.87 25000
6 2012-03-29 Sell 6 6 2012-02-29 0.879 -12000
7 2012-04-01 Sell 7 7 2012-04-01 0.058 -15000
Account Table
id Program_id
1 1
2 1
3 2
Program table
id Abbreviation
1 AA
2 AC
Agents table
id Name
1 Bob
2 Ben
Я хочу, чтобы получить первую дату распродажи и первую дату покупки, чтобы получить среднее количество дней до того, как сделка будет продана, чтобы получить дни сделка в инвентаре, поэтому он должен быть
(Sell date)2012-03-01 - (Buy date)2012-02-08
им пытаются это
SELECT
case when t.trans_type ='Sell' then transaction_date end as SellDate
,case when t.trans_type ='Buy' then transaction_date end as BuyDate
,DATEDIFF(case when t.trans_type ='Sell' then transaction_date end
,case when t.trans_type ='Buy' then transaction_date end) as Date
,transaction_date
FROM transactions t
order by transaction_date
Но всегда получаю NULL в Дата
Вот полный запрос,
SELECT p.abbreviation,ag.name
,sum(-1.00 * t.miles * t.price - coalesce(t.fees,0) - coalesce(c.cost,0)) as profit
,sum(t.miles) 'Totakl Miles'
,avg(price/miles) 'Average'
,transaction_date
FROM transactions t
inner join accounts a on t.account_id = a.id
inner join programs p on a.program_id = p.id
inner join agents ag on t.agent_id = ag.id
LEFT JOIN (
SELECT rp.sell_id, sum(rp.miles * t.price) as cost
from report_profit rp
inner join transactions t on rp.buy_id = t.id
where t.miles > 50000
group by rp.sell_id
order by rp.sell_id
) c on t.id = c.sell_id
where t.transaction_date BETWEEN '2012-03-14' AND '2012-04-14'
Group by p.id , ag.id
EDIT
Я попытался liquorvicar ответ, но он дает ошибку «Sub-запрос возвращал более одной записи» из-за Группа по i добавлена
Любой может провести меня по этому вопросу?
Заранее спасибо ...
Получил пример запроса и результата? Вам нужно передать 2 аргумента DATEDIFF, так как это выглядит для меня, вы передаете только один аргумент в DATEDIFF, потому что ваш оператор case даст только одну дату. – Rob
Это потому, что вы работаете только по одной строке за раз, что означает, что ваш «датифф» всегда получает «нуль» для одной из дат. Вам потребуется самостоятельное присоединение к «транзакциям», чтобы соответствовать «Записи покупок» с документами «Продать». –
У вас нет ключа, который связывает транзакции покупки и продажи. Откуда вы знаете, какая сделка по продаже относится к какой транзакции покупки? – nnichols