[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