跨列按ID分组

四面

我有一个包含以下各列的表格

timetrack_id | timetrack_length | timetrack_rate | timetrack_parent

如果时间跟踪已继续,timetrack_parent保持为a,timetrack_id否则保持为0

我想为每个timetrack_id撤回一行,但要结合timetrack_lengthwhere 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_parentSUMtimetrack_length,但是这也组那些有timetrack_parent0,这是没有关系的。此查询也不会将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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章