PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : PL/pgSQL » Histoire de count et de jointures... » 16/02/2011 21:06:45

Je viens de tester la requête, à première vue le résultat correspond exactement à ce que je veux ! Merci encore !

Elise

#2 Re : PL/pgSQL » Histoire de count et de jointures... » 16/02/2011 16:01:56

Merci pour cette réponse très rapide !

Effectivement le modèle de données n'est pas terrible mais je ne peux malheureusement pas le modifier :-/

Je pourrai tester la requête en fin de journée mais à première vue cela semble bien répondre à mon besoin ! Le fait de pouvoir appeler la table main_event depuis la sous-requête correspond à ce que j'ai cherché à faire pendant un bon moment :-)

Par contre il ne manquerait pas un "from events_stats" juste avant "as main_event" ?

select event_id, employee_id, (select count(employee_request) from events_stats as tmp_count where employee_request=true and tmp_count.employee_id=main_event.employee_id and tmp_count.event_date < main_event.event_date) as main_event;

Elise

#3 PL/pgSQL » Histoire de count et de jointures... » 15/02/2011 23:38:56

Worthatry
Réponses : 4

Bonjour,

J'ai des connaissances SQL plutôt basiques et je bute sur une requête ; je pense que la réponse sera évidente pour une personne un tant soit peu expérimentée en SQL...

Voici les colonnes sur lesquels j'exécute ma requête (appartenant à une même table) :

event_id (int)
event_date (timestamp)
employee_id (int)
employee_request (bool)

Et voici les relations entre colonnes :

- Il y a 1 et un seul event_date par event_id
- Il y a de 1 à 8 employee_id par event_id
- Il y a  0 ou 1 employee_request par employee_id par event_id

Pour le moment, j'arrive à faire la chose suivante : créer une table affichant le nombre d'employee_request pour chaque employee_id pour chaque event_id.

Voici la requête :

select event_id, employee_id, request_cnt from events_stats as stats1 JOIN
(select employee_id, count (employee_request) as request_cnt from events_stats where employee_request = true group by employee_id) as stats2
on stats2.employee_id = stats1.employee_id

Mais voici ce que j'aimerai réaliser :

Créer une table affichant le nombre d'employee_request pour chaque employee_id pour chaque event_id, MAIS avec le count d'employee_request comptabilisant uniquement les lignes où l'event_date < event_date de l'event_id correspondant.

En fait, je souhaiterai variabiliser l'élément TIMESTAMP ci-dessous :

select event_id, employee_id, request_cnt from events_stats as stats1 JOIN
(select employee_id, count (employee_request) asrequest_cnt from events_stats where employee_request = true and event_date < (TIMESTAMP '2010-12-29 01:07:40'  - interval '1 seconds') group by employee_id) as stats2
on stats2.employee_id = stats1.employee_id

Il faudrait que le TIMESTAMP '2010-12-29 01:07:40' devienne dynamiquement stats1.event_date, ce qui est impossible à réaliser dans la sous-requête… je tourne en rond...

Merci pour votre aide !

Elise

Pied de page des forums

Propulsé par FluxBB