我有一个复杂的问题。
我有一个查询,它结合了几个表中的数据。例如:
traffic: id, traffic_source_id, first_hit_date
goals: id, goal_type, goal_date, goal_value
traffic_sources: id, source_name
目标类型可以是“联系表格”、“演示下载”、“购买”目标值是数字。并显示用户在同一日期(天)达到目标的次数。
我试图为每个 traffic_id 显示一行,然后为这个 traffic_id 总结每个目标。当用户第一次来时,他/她会得到一个与他在一起的流量 ID(cookie)。例如,他/她可以在第一个命中日期后一周达到一个目标,然后在 2 天后达到另一个目标。
我希望能够从 date > to date 查询并显示该特定范围内目标的正确总和值。当我尝试使用 SUM(CASE WHEN ...) 时,我不能只对目标表的范围求和。
示例: 流量 从:2 月 1 日到 2 月 28 日
3 | google adwords | 0 contact | 1 demo download | 1 purchase
4 | facebook | 1 contact | 3 demo download | 3 purchase
但是当我想将范围从 1-feb 更改为 14-feb
3 | google adwords | 0 contact | 1 demo download | 0 purchase
4 | facebook | 0 contact | 2 demo download | 2 purchase
希望我足够清楚...
任何建议将不胜感激。
更新:查询我现在拥有的示例:
SELECT traffic.traffic_id as original_traffic_id hit_date, referrer, referrer_url, keyword, ip,
SUM(CASE goals.goal_type WHEN 'Contact' THEN 1 ELSE 0 END) goal_contact,
SUM(CASE goals.goal_type WHEN 'Download' THEN 1 ELSE 0 END) goal_download,
SUM(CASE goals.goal_type WHEN 'Signup' THEN 1 ELSE 0 END) goal_signup,
SUM(CASE goals.goal_type WHEN 'Purchase' THEN 1 ELSE 0 END) goal_purchase
FROM traffic
LEFT JOIN goals ON goals.traffic_id = traffic.traffic_id
WHERE traffic.traffic_id=100 AND hit_date >= '$from_date' AND hit_date <= '$to_date'
(其中 $from_date 和 $to_date 是 mysql 日期格式)
(这不是真正的查询,因为原始查询要大得多,并且包括大约 7 个加入的表)此查询实际上汇总了所有目标,而不必输入 cound 目标日期。我希望能够将 SUM 限制在 $from_date 和 $to_date 的范围内
希望它更清楚一点。