我有四个表,Company、Vehicles、Quotes 和 PhoneRequests。
公司可能会收到有关其车辆的报价和请求。
每个报价和请求都标有时间。
只要报价或请求的数量大于 0,我想查找每个公司在每个月收到的报价和请求的数量。
我不知道如何分组以使两个单独表中的月份相同。
这是我到目前为止所得到的:
SELECT
company.name `company`,
vehicle.name `vehicle`,
DATE_FORMAT(COALESCE(quote.qtime, pr.date),'%Y-%m') `month`,
COUNT(DISTINCT quote.qid) `quotes`,
COUNT(DISTINCT pr.id) `phone_reqs`
FROM companies company
LEFT JOIN vehicles vehicle ON vehicle.compid=company.cid
LEFT JOIN quote_vehicle qv ON qv.vehicle_id=vehicle.vid
LEFT JOIN quotes quote ON qv.quote_id=quote.qid
LEFT JOIN phone_requests pr ON pr.vehicle_id=vehicle.vid AND quote.qtime IS NULL OR DATE_FORMAT(quote.qtime,'%Y-%m')=DATE_FORMAT(pr.date,'%Y-%m')
GROUP BY
company.cid, `month`
HAVING
quotes > 0 OR phone_reqs > 0
ORDER BY
`month` DESC, `company` ASC
但它似乎将其归咎于phone_reqs
错误的公司,可能是因为那AND quote.qtime IS NULL OR DATE_FORMAT(quote.qtime,'%Y-%m')=DATE_FORMAT(pr.date,'%Y-%m')
一点。不过,我不知道如何确保报价和请求发生在同一个月内。