我有两个表:leads
和tracking_leads
。
表结构如下,
---------------------------- ----------------------
| leads | | tracking_leads |
---------------------------- ----------------------
| id | | tracking_id |
| lead_id | | lead_id |
| anzahl_tickets | | field_name |
| bearbeitungs_id_einkauf | | date |
---------------------------- -----------------------
我需要sql来连接带有track_leads表的表导联,但是仅获得表trace_leads中的最后一个匹配行。
Sql示例:
SELECT DATE_FORMAT(tracking_leads.date, "%d.%m.%Y") as trackDate, SUM(l.anzahl_tickets)
as sumValue FROM leads as l INNER JOIN tracking_leads ON l.lead_id=tracking_leads.lead_id
WHERE bearbeitungs_id_einkauf <> '' AND tracking_leads.field_name='bearbeitungs_id_einkauf'
GROUP BY DATE_FORMAT(tracking_leads.date, "%d.%m.%Y")
在这一部分中:INNER JOIN tracking_leads ON l.lead_id=tracking_leads.lead_id
仅需要tracking_leads表中的最后一条记录。
例如,潜在客户数据:
id lead_id anzahl_tickets bearbeitungs_id_einkauf
1 20 2 100
tracking_leads数据:
tracking_id lead_id field_name date
1 20 bearbeitungs_id_einkauf 2019-05-31 13:55
2 20 bearbeitungs_id_einkauf 2019-05-31 15:00
结果我需要得到:
2019-05-31 2
但是现在我得到了
2019-05-31 4
因为存在重复的lead_id(仅需要最后一条记录)。
我该如何解决这个问题?
谢谢!
答案 0 :(得分:0)
首先,我不喜欢日期格式DD-MM-YYYY,因为您无法对其进行排序。只需使用YYYY-MM-DD。
第二,您可以使用相关子查询来获取最新日期:
SELECT DATE(tl.date) as trackDate, SUM(l.anzahl_tickets) as sumValue
FROM leads l INNER JOIN
tracking_leads tl
ON l.lead_id = tl.lead_id
WHERE l.bearbeitungs_id_einkauf <> '' AND
tl.field_name = 'bearbeitungs_id_einkauf' AND
tl.date = (SELECT MAX(tl2.date)
FROM tracking_leads tl2
WHERE tl2.lead_id = tl.lead_id AND
tl2.field_name = tl.field_name
)
GROUP BY DATE(tl.date);
当然,您可以根据需要保留原始日期格式。如果这样做,则可以使用:
ORDER BY MIN(tl.date)
所以结果按日期排序。
答案 1 :(得分:0)
我的偏好是使用嵌入式视图来获取最大日期。 关联的子查询每行将执行一次,而内联视图则只需执行一次。
这应该有效:
SELECT DATE_FORMAT(tl.date, "%d.%m.%Y") as trackDate,
SUM(l.anzahl_tickets) as sumValue
FROM leads as l
INNER JOIN (
select x.lead_id, max(x.date) date from tracking_leads x where x.field_name = 'bearbeitungs_id_einkauf' group by x.lead_id
) tl ON l.lead_id=tl.lead_id
WHERE bearbeitungs_id_einkauf <> ''
GROUP BY DATE_FORMAT(tl.date, "%d.%m.%Y")
侧节点:WHERE子句中对 bearbeitungs_id_einkauf 的空值的测试是特定于数据库的,因此请注意那里的问题。例如,在Oracle中,没有空字符串之类的东西,因此您必须对其进行测试,使其不为空。我假设这不是Oracle。