[OSM-dev-fr] requete sql

didier2020 didier2020 at free.fr
Jeu 11 Déc 20:45:11 UTC 2014


Merci a tous !
voila vos resulat :

temps2,3et4 ne sont la que pour voir les differences eventuelles
CREATE TABLE tparc
(
  "timetamp" integer,
  id integer,
  temps integer,
  temps2 integer, 
  temps3 integer,
  temps4 integer

);

INSERT INTO tparc VALUES (1,1,100,-1,-1,-1);
INSERT INTO tparc VALUES (2,1,90,-1,-1,-1);
INSERT INTO tparc VALUES (3,1,110,-1,-1,-1);
INSERT INTO tparc VALUES (1,2,0,-1,-1,-1);
INSERT INTO tparc VALUES (2,2,0,-1,-1,-1);
INSERT INTO tparc VALUES (3,2,100,-1,-1,-1);
INSERT INTO tparc VALUES (1,3,9,-1,-1,-1);
INSERT INTO tparc VALUES (2,3,9,-1,-1,-1);
INSERT INTO tparc VALUES (3,3,9,-1,-1,-1);

UPDATE tparc
SET temps2 = (select critere.temps * 1.5
FROM tparc as critere
WHERE 
tparc.timetamp = critere.timetamp and critere.id=1 and critere.temps>95)
where tparc.id=2;
-- modifie 3 lignes

UPDATE tparc
SET temps3 = critere.temps * 1.5
FROM tparc as critere
WHERE 
tparc.timetamp = critere.timetamp and critere.id=1 and critere.temps>95
and tparc.id=2;
-- modifie 2 lignes

WITH u as (
SELECT t1.timetamp, t1.temps*1.5 as temps 
FROM 
tparc t1 JOIN tparc t2 ON (t2.timetamp=t1.timetamp ) WHERE t1.temps>95
and t1.id=1 and t2.id=2)

UPDATE tparc 
SET temps4=u.temps
FROM u 
WHERE
tparc.timetamp=u.timetamp and id=2;
-- modifie 2 lignes

Le jeudi 11 décembre 2014 à 20:21 +0100, Christian Quest a écrit : 
> Ah ok, un WITH/SELECT/UPDATE doit permettre de faire ça.
> 
> 
> WITH u as (SELECT t1.id, t2.temps*1.5 as temps FROM latable t1 JOIN
> latable t2 ON (t2.id=t1.id-1) WHERE t1.temps IS NULL AND t2.temps IS
> NOT NULL)
> UPDATE latable FROM u SET temps=u.temps WHERE id=u.id;
> 
> 
> L'idée c'est que le SELECT sort la liste des updates à faire et le
> WITH les passe à l'UPDATE...
> Là, le SELECT devrait sortir l'id et la valeur calculée de temps.
> 
> 
> Plus de doc sur ce "WITH" magique
> ici: http://docs.postgresql.fr/9.3/queries-with.html
> 
> 
> Tu va voir c'est mortel comme truc car ça peut être récursif :)
> 
> 
> 
> Le 11 décembre 2014 19:52, didier2020 <didier2020 at free.fr> a écrit :
>         Le jeudi 11 décembre 2014 à 18:37 +0100, sly (sylvain letuffe)
>         a
>         écrit :
>         > On jeudi 11 décembre 2014, didier2020 wrote:
>         > > une troncon de route n'a pas de comptage/temps,
>         > > mettre a jour ce troncon en prenant comme modele les
>         données du troncon
>         > > en amont/précédent avec un coef d'ajustement lié aux
>         caractéristiques
>         > > des 2 troncon.
>         >
>         > Et si tu est présenté avec 3 tronçons consécutifs (t1,t2,t3)
>         dont tu ignores
>         > le temps, tu fais quoi pour t2 ?
>         ce n'est pas ce que désire faire, ce serait plutot
>         t1 et t3 connu
>         analyse les données de t1 et t3, puis essayer de corriger t2
>         la requete n'etant la que pour ne pas creer des paliers de
>         temps
>         
>         > Tu calculs t1 d'abord et tu repasses ton algo pour trouver
>         t2 ?
>         > Et si tu as 30 tronçons consécutifs ? une.... boucle ?
>         > gestion des valeurs invalides ? vitesse max : -5 ou 0 ou
>         250 ?
>         > Y'a un moment où SQL ne suffit plus, ma philosophie de
>         développement+sgbd :
>         > Dès que je suis tenté de mettre un if, c'est qu'il ne faut
>         plus faire ça en
>         > SQL ;-)
>         
>         
>         
>         
>         
>         
>         
>         _______________________________________________
>         dev-fr mailing list
>         dev-fr at openstreetmap.org
>         https://lists.openstreetmap.org/listinfo/dev-fr
>         
> 
> 
> 
> 
> -- 
> Christian Quest - OpenStreetMap France
> _______________________________________________
> dev-fr mailing list
> dev-fr at openstreetmap.org
> https://lists.openstreetmap.org/listinfo/dev-fr





Plus d'informations sur la liste de diffusion dev-fr