From: | Nicolas Baccelli <nicolas(dot)baccelli(at)gmail(dot)com> |
---|---|
To: | Frederic Gaerel <frederic(dot)gaerel(at)chronopost(dot)fr> |
Cc: | pgsql-fr-generale <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Re: Fonctions sur JSON |
Date: | 2015-06-03 08:38:55 |
Message-ID: | CAJcqnA3ftstmAdv4EPmWxfC2TJQ5A8-h0_w5Hv2KYHmhai0TjA@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonjour,
Avec ce genre de fonction ?
WITH T AS (
SELECT '{"A":"NULL","B":"NULL","C":"NULL"}' AS accuse, 1234 valeur
UNION
SELECT '{"A":"2015-06-02","B":"NULL","C":"NULL"}', 5678
UNION
SELECT '{"A":"2015-06-01","B":"2015-06-02","C":"2015-06-03"}', 1011
)
SELECT (select max(replace(value::text,'NULL','1970-01-01')::date) from
json_each(accuse::json) limit 1) as date_accuse, valeur
FROM T
WHERE position('NULL' IN accuse::text) = 0
group by
t.valeur,t.accuse
having max((select max(replace(value::text,'NULL','1970-01-01')::date) from
json_each(accuse::json) limit 1)) < now() at time zone 'edt';
J'ai l'impression que cela fait ce que vous voudriez
Cordialement
Adoptons des gestes responsables :
Je vous recommande de n’imprimer ce mail que si nécessaire.
Le 3 juin 2015 10:17, Frederic Gaerel <frederic(dot)gaerel(at)chronopost(dot)fr> a
écrit :
> Précision :
>
> Je suis en version 9.3.
> Pas de JsonB a disposition
>
> *Frédéric Gaërel*
>
> Expert Domaine Transport. Référent PostgreSQL
> 01 74 22 82 22 | | frederic(dot)gaerel(at)chronopost(dot)fr
>
> [image: Logo Chronopost]
> Immeuble Orsud - 3/5 avenue Gallieni - CS 70103 - 94254 Gentilly Cedex |
> chronopost.fr <http://www.chronopost.fr/>
> Suivez nous sur Facebook <https://fr-fr.facebook.com/chronopost> et
> Twitter <https://twitter.com/chronopost>.
>
> [image: DPD Group]
>
> Le 2 juin 2015 16:51, Frederic Gaerel <frederic(dot)gaerel(at)chronopost(dot)fr> a
> écrit :
>
>> Bonjour à tous.
>>
>> J'ai une table contenant une colonne "accusé de réception" sous la forme
>> d'un json :
>> exemple :
>>
>> WITH T AS (
>> SELECT '{"A":"NULL","B":"NULL","C":"NULL"}' AS accuse, 1234 valeur
>> UNION
>> SELECT '{"A":"2015-06-02","B":"NULL","C":"NULL"}', 5678
>> UNION
>> SELECT '{"A":"2015-06-01","B":"2015-06-02","C":"2015-06-03"}', 1011
>> )
>> SELECT accuse::json, valeur into tmp_json FROM T;
>>
>> SELECT * FROM tmp_json;
>>
>> Le principe est le suivant : A, B et C sont des clients qui viennent
>> positionner leurs accuses de réception spécifiques lors de la récupération
>> de la 'valeur'.
>>
>> Si une ligne a été lue par tous les clients, elle est candidate à la
>> purge.
>>
>> Lors de la purge, je dois supprimer toutes les lignes :
>>
>> - qui ont été lues par tous les clients : WHERE position('NULL'
>> IN accuse::text) = 0 (ici seule la ligne avec la valeur 1011 est
>> "purgeable")
>> et
>> - dont le MAX des accusés de réception ("2015-06-03") est strictement
>> inférieur à la date du jour : AND .... Là je sèche !!!
>>
>> Une idée pour résoudre ce problème ?
>>
>> Merci d'avance
>>
>>
>> *Frédéric Gaërel*
>>
>> Expert Domaine Transport.
>> | frederic(dot)gaerel(at)chronopost(dot)fr
>>
>> [image: Logo Chronopost]
>> Immeuble Orsud - 3/5 avenue Gallieni - CS 70103 - 94254 Gentilly Cedex |
>> chronopost.fr <http://www.chronopost.fr/>
>> Suivez nous sur Facebook <https://fr-fr.facebook.com/chronopost> et
>> Twitter <https://twitter.com/chronopost>.
>>
>> [image: DPD Group]
>>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Dimitri Fontaine | 2015-06-03 08:48:37 | Re: Fonctions sur JSON |
Previous Message | Frederic Gaerel | 2015-06-03 08:17:13 | Re: Fonctions sur JSON |