désolé pour le titre mais je ne suis pas sûr de savoir comment je devrais l'appeler. J'utilise PostgreSQL 8.3 et serait bien avec les propositions de requête non-ansi.Groupe complexe par requête (récursif?)
Supposons que ce schéma:
TimeEntries
id - int
entry_date - date
tracked_seconds - int
project_id - int
projects
id - int
name - string
path - string
projets sont hirachical, je ne me soucie pas de id_parent etc. plutôt que j'ai opté pour la colonne de chemin, par exemple:
Renovate Home - path = renovate-home
- Clean Kitchen - path = renovate-home/clean-kitchen
Je veux une requête renvoie les éléments suivants:
date - project_path - tracked_seconds(this project) - tracked_seconds (total of self and child projects)
groupés par date et plusieurs fois par chemin de projet pour exemple da ta:
projects
name path
Funny funny
- Project funny/project
-- Is Funny funny/project/is-funny
Foo foo
- Bar foo/bar
S'il y a maintenant TimeEntries pour drôle/projet et foo/bar et je lance cette requête:
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
Je reçois ce résultat:
entry_date project_path ?sum?
2010-10-01 funny/project 20
2010-10-01 foo/bar 10
Ce que je veux est ce:
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
C'est ce que je suis également venu avec, encore je dois filtrer dans mon application et qui pourrait être fait avec project_path seul. Quoi qu'il en soit merci pour l'effort – Maxem
juste une note rapide: + ne fonctionne pas pour la concaténation de caractères en SQL standard (et donc cela ne fonctionne pas dans PostgreSQL) –
@a_horse_with_no_name - merci, je ne l'avais pas réalisé. Cela fonctionne à peine en T-SQL, je dois dire - plus souvent que je n'ai pas à contraindre une valeur ou une autre à une chaîne de caractères afin de ne pas essayer de convertir une chaîne par exemple. un nombre entier. –