我有一个包含以下各列的表格
timetrack_id | timetrack_length | timetrack_rate | timetrack_parent
如果时间跟踪已继续,则timetrack_parent
保持为a,timetrack_id
否则将保持为0
。
我想为每个timetrack_id撤回一行,但要结合timetrack_length
where timetrack_parent = timetrack_id
。然后,其余值应来自父行(其中timetrack_parent = 0,并且存在具有该timetrack_id的timetrack_parent的行)。
所以对于以下数据
timetrack_id | timetrack_length | timetrack_rate | timetrack_parent
-------------+------------------+----------------+-------------------
1 | 5 | 20.00 | 0
2 | 7 | 20.00 | 0
3 | 8 | 20.00 | 0
4 | 20 | 20.00 | 1
5 | 15 | 25.00 | 1
6 | 6 | 30.00 | 3
我会回来
1 | 40 | 20.00 | 0
2 | 7 | 20.00 | 0
3 | 14 | 20.00 | 0
我有以下查询
SELECT `timetrack_id`, `timetrack_parent`, `timetrack_rate`, SUM(`timetrack_length`)
FROM `timetrack`
GROUP BY `timetrack_parent`, `timetrack_parent` = `timetrack_id`
这确实集团通过行timetrack_parent
和SUM
的timetrack_length
,但是这也组那些有timetrack_parent
0,这是没有关系的。此查询也不会将where分组timetrack_parent = timetrack_id
。我也不确定来自父行的其他数据是否总是会返回。
所以返回的是
1 | 20 | 20.00 | 0
4 | 35 | 20.00 | 1
6 | 6 | 30.00 | 3
有人可以提供一些指导吗?
我认为此查询应该工作。您需要将表自身连接起来以获取父/子分组,然后添加所有父行(timetrack_parent = 0),然后进行分组。
SELECT id1 timetrack_id, sum(len) sumlength, timetrack_rate, timetrack_parent FROM
(
SELECT a.timetrack_id id1, b.* FROM timetrack a
JOIN timetrack b ON a.timetrack_id=b.timetrack_parent
UNION ALL
SELECT c.timetrack_id, c.* FROM timetrack c
WHERE c.timetrack_parent=0
ORDER BY 4
) z
GROUP BY 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句