извините за заголовок, но я не знаю, как мне его назвать.Я использую PostgreSQL 8.3 и подойдет для запросов, не относящихся к ANSI.
Предположим, эта схема:
TimeEntries
id - int
entry_date - date
tracked_seconds - int
project_id - int
projects
id - int
name - string
path - string
Проекты являются иерархическими, меня не волнует parent_id и т. Д.Я выбрал столбец пути, пример:
Renovate Home - path = renovate-home
- Clean Kitchen - path = renovate-home/clean-kitchen
Я хочу запрос, который возвращает следующее:
date - project_path - tracked_seconds(this project) - tracked_seconds (total of self and child projects)
Группировка по дате и несколько раз для пути проекта, поэтому пример данных:
projects
name path
Funny funny
- Project funny/project
-- Is Funny funny/project/is-funny
Foo foo
- Bar foo/bar
Если сейчас есть TimeEntries для funny / project и foo / bar, и я выдаю этот запрос:
SELECT entry_date, p.path as project_path, sum(tracked_seconds) / 60
FROM time_entries te
LEFT JOIN projects p on te.project_id = p.id
GROUP BY entry_date, p.path
Я получаю такой результат:
entry_date project_path ?sum?
2010-10-01 funny/project 20
2010-10-01 foo/bar 10
Я хочу вот что:
entry_date project_path direct_sum total
2010-10-01 funny 0 20
2010-10-01 funny/project 20 20
2010-10-01 foo 0 10
2010-10-01 foo/bar 10 10