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

#1 10/01/2018 17:11:36

reimic5
Membre

x en fonction <= a la date

Bonjour,

Merci beaucoup pour votre aide.
J'ai deux table :
La table table1 avec 3 colonnes user, date, budget.

-- Table1 --
U  |     date     |  Budget
1  | 01/01/17  |  100
2  | 01/01/17  |  110
3  | 01/01/17  |  101
2  | 15/02/17  |  111
2  | 03/03/17  |  109
3  | 07/06/17  |  102

La table2 avec trois colonnes user, date depense

-- Table2 --
U  |     date    |  depense
1  | 04/01/17 |  100
2  | 06/01/17 |  150
1  | 24/02/17 |  130
2  | 20/03/17 |  110
1  | 14/07/17 |  170
3  | 16/08/17 |  180

je souhaiterai avoir la table 2 avec une colonne du budget aloue (< ou = a la date de depense) en fonction des users.


resultat souhaite:

-- resultat --
U  |  date  | depense | budget
1  | 01/17 |    100     | 100
2  | 01/17 |    150     | 110
1  | 02/17 |    130     | 100
2  | 03/17 |    110     | 109
1  | 07/17 |    170     | 100
3  | 08/17 |    180     | 102

je n'y arrive pas, ma formule ne fonctionne pas:

SELECT
  to_char((table2.date) ::timestamp with time zone, 'MM/YYYY' ::text) AS date,
  table2.depense,
  table2.user,
  table1.budget
FROM
  table1
  INNER JOIN table2 ON (public.table1.user = table2.user)
GROUP BY
  to_char((table2.date) ::timestamp with time zone, 'MM/YYYY' ::text),
  table2.user,
  table1.budget

Dernière modification par reimic5 (15/01/2018 17:40:14)

Hors ligne

#2 12/01/2018 15:55:21

gleu
Administrateur

Re : x en fonction <= a la date

Que voulez-vous dire par "elle ne fonctionne pas" ? elle renvoie un message d'erreur ? si oui, lequel ? elle ne renvoie pas les bons résultats ? si oui, lesquels ?


Guillaume.

Hors ligne

#3 12/01/2018 16:31:51

damalaan
Membre

Re : x en fonction <= a la date

Vos 2 tables semblant identiques, ne faudrait-il pas revoir le modèle :
U
Date
Type (budget ou depense)
Montant
?

Ensuite avec une fonction de fenêtrage, on doit pouvoir travailler facilement sur chaque partition (U)

Hors ligne

#4 12/01/2018 17:24:25

reimic5
Membre

Re : x en fonction <= a la date

voici le code et merci :
SELECT
to_char((table2.date) ::timestamp with time zone, 'MM/YYYY' ::text) AS date,
table2.user,
min(table2.depense),
min(table1.budget)
FROM
table1
INNER JOIN
table2 ON public.table1.user = table2.user
and to_char((table2.date) ::timestamp with time zone, 'MM/YYYY' ::text) = to_char((public.table1.date) ::timestamp with time zone, 'MM/YYYY' ::text)
GROUP BY
to_char((table2.date) ::timestamp with time zone, 'MM/YYYY' ::text),
table2.user

Hors ligne

Pied de page des forums