【发布时间】:2016-06-30 20:55:59
【问题描述】:
我知道标题令人厌恶,但我想不出一个简洁的方式来描述我的问题。
我有一张名为onsite_notes 的表。 onsite_notes 的 PK 是一个名为 onsite_note_id 的字段。我正在尝试为每个客户添加所有笔记的时间。目前,我的查询正在返回某些行的双重条目。我不知道为什么,但这真的很烦人。我想要做的是计算具有特定 FK(customer_id)的不同行。这是当前查询。
SELECT c.searchable_name, co.*, sum(n.time)
as worked_hours_onsite, 'onsite' as type
FROM customers c
LEFT JOIN contracts co on c.customer_id = co.customer_id
LEFT JOIN onsite_tickets t ON t.customer_id = c.customer_id
LEFT JOIN onsite_notes n ON t.onsite_id = n.onsite_id
and (n.date >= 1464760800)
and (n.date < 1467352800)
and (n.isbillable = 1)
WHERE co.contract_type != '' AND
((timestamp(now()) between co.start_date and co.end_date)
OR ((timestamp(now()) <= co.end_date) AND (co.start_date = 0))
OR ((timestamp(now()) >= co.start_date) AND (co.end_date = 0))
OR ((co.start_date = 0) AND (co.end_date=0)))
GROUP BY c.customer_id DESC ) ....
这就是事情的总体思路。它有一个工会位,但它让我同样头痛。基本上,我如何确保为每个客户获得唯一的行?我的客户行是唯一的,但聚合数据不是唯一的,我希望它是唯一的。
【问题讨论】:
-
您要加入的其中一个表对于每个客户 ID 有两行,因此当您使用
onsite_notes加入时,行数会增加一倍。你能展示一些产生不良结果的样本数据吗? -
有趣的故事。所以,我让一个比我熟练得多、知识渊博的同事看了看。鉴于表本身的数据是正确的,SQL 确实有效。你是 100% 正确的。问题是行在某种程度上是不唯一的。我们最终把一切都整理好了。感谢您的帮助!
标签: mysql distinct aggregate-functions