Vous n'êtes pas identifié(e).
Si je veux tester le 03/01/2011, je fais comment ?
execute test('03-01-2011')
La prochaine fois, je commencerais par lire la doc :-)
PREPARE test (date) as
SELECT sum(case when $1=depart then 0.5 when $1=arrivee then 0.5 when ($1 > arrivee and $1 < depart) then 1 else 0 end) from essai;
Marc, je suis largué là !
Comment j'utilise ça ?
Si je veux tester le 03/01/2011, je fais comment ?
MAN PREPARE pour commencer :-)
Cordialement
Pouvez-vous expliquer un peu plus votre problème ? par exemple en donnant un exemple de données en entrée, ainsi qu'en sortie pour chaque question.
Bien sur:
insert into essai values ('dupont','01-01-2011','10-01-2011');
insert into essai values ('dupond','05-01-2011','12-01-2011');
insert into essai values ('durand','07-01-2011','09-01-2011');
pb 1 : Si je veux savoir combien il y a de client présent le 3/1/2011, je devrais trouver 1 (pour le 8/1/2011, il y en a 3)
pb 2 : sur une periode donné, je cherche a obtenir un truc du genre:
2011-01-01 | 1
2011-01-02 | 1
2011-01-03 | 1
2011-01-04 | 1
2011-01-05 | 2
2011-01-06 | 2
2011-01-07 | 3
2011-01-08 | 3
etc...
pb 3 : idem 2 mais :
2011-01-01 | 0.5
2011-01-02 | 1
2011-01-03 | 1
etc...
Je ne suis pas certain dêtre plus clair !
Bonsoir,
Je viens d'essayer le code proposé mais ça ne fonctionne pas. Il est aussi fort probable que je fasse des erreurs. Je vais retenter tout de même.
Bonjour, peux tu préciser comment ça ne fonctionne pas ? message d'erreur ? ou autre ?
Si je suis ton raisonnement, tu veux connaitre pour chaque ligne de fd_mobpro_2006 la zone urbaine attaché au champ "DCLT"
et celle attaché au champ "commune".
La correspondance zone urbaine <-> code commune se trouve dans la table "communes_fr_rgpt"
Qu'est ce qu'IPONDI ?
Cordialement
Bonjour,
soit une une table de ce style :
create table essai (
identifiant varchar,
arrivee date,
depart date);
Comment faire pour connaitre le nb d'identifiant présent un jour donné ?
Sur une période donnée ?
Et si on veut que le jour d'arrivée compte pour 1/2 et celui de départ aussi ?
Bref encore des manipulations de date pas simple à mon gout. J'ai bien fait des essais avec "overlaps" mais ça ne m'a mené nulle part.
Merci d'avance.
Bonjour,
je trouve cette requête curieuse, j'ai l'impression qu'il y a un produit cartésien entre public_communes_fr_rgpt et public_communes_fr_rgpt_1
à moins que ce soit la notation access qui m'induise en erreur.
Est ce que celle ci marcherai dans psql ?
SELECT
B.Code_AU, C.Code_AU,Sum(A.IPONDI)
FROM fd_mobpro_2006 A
INNER JOIN communes_fr_rgpt B ON B.code_insee = A.DCLT
INNER JOIN communes_fr_rgpt C ON B.code_insee = A.commune
WHERE B.Code_AU not in ('999','000')
AND C.Code_AU not in ('999','000')
GROUP BY B.Code_AU, C.Code_AU;
Cordialement
Bonjour confrère,
si tu pars sur une debian, c'est que tu n'est pas novice en unices libres (ta connaissance de cron, rsync renforcent cette hypothèse). Tu n'auras donc aucun mal à gérer une base postgresql dessus (puisqu'il y a des paquets pour l'installation, reste à voire la version packagée par défaut pour debian).
Cordialement
Bonjour, il me semble qu'avant la 9, il etait de bon ton de mettre le AS :
SELECT
*
FROM (
(
select Organisme.nomOrganisme,
sum(NombreEmploye.nombre)
from NombreEmploye, Organisme
where NombreEmploye.idOrganisme=Organisme.idOrganisme
group by Organisme.nomOrganisme
)
union
(
select 'TOTAL' as TOTAL,
sum(NombreEmploye.nombre)
from NombreEmploye
)
) AS tmp
ORDER BY tmp.nomOrganisme='total' asc, tmp.nomOrganisme;
sinon, toujours dans le crado:
SELECT
*
FROM (
(
select Organisme.nomOrganisme,
sum(NombreEmploye.nombre)
from NombreEmploye, Organisme
where NombreEmploye.idOrganisme=Organisme.idOrganisme
group by Organisme.nomOrganisme
)
union
(
select 'TOTAL' as TOTAL,
sum(NombreEmploye.nombre)
from NombreEmploye
)
) AS tmp
ORDER BY 2;
Cordialement
Effectivement, je vois que le temps d'exécution de la requête est long, mais c'est du cas par cas pour tirer une liste de dossier au sort et aller les controler, donc rien de critique en terme de performances.
merci encore à tous
Bonsoir,
ça me convient parfaitement en terme de simplicité
Merci beaucoup
Par nécessairement, c'est pour faire de l'échantillonage occasionel, tirage au sort sans remise.
Faut-il passer par un create function en pl/pgsql ?
Bonjour,
y'a t-il moyen de demander à postgresql de me renvoyer n lignes au hasard dans une requete (a l'instar de limit ou offset) genre select * from ma_table sample 100 pour récuperer 100 lignes au pif !
Cordialement
Ok,
je ne savais pas que déclarer un type numeric du style (50,2) ne prenait pas plus de place q'un (5,2), voila qui m'arrange bien et résoud mes problèmes existentiels (actuellement, mes bases et calculs monétaires se font en centimes d'euros, ce qui me permettait de ne pas m'enquiquiner avec la gestion des décimales (sauf au moment de l'affichage). J'avais également opté pour les centimes pour des raisons de rapidité (le numeric etant réputé "lent").
Pour le type money, il fonctionne nickel en affichage chez moi sous linux (avec pgadmin ou en console avec psql) : conclusion, encore un problème windows.
Vos réponse confirme quand même ce que je subodorai, il est difficile à manipuler par la suite.
Cordialement
Hello,
je me pose la question de l'utilité du type money par rapport à un numeric par exemple ?
le gros défaut du numeric à mon gout est qu'il faut lui donner une taille (et pas juste le nombre de decimal) (je reverais de pouvoir definir un numeric comme ça : numeric(,2)
Du coup le type money règlerai partiellement ce soucis.
Mais il m'a l'air plus fastidieux à utiliser (déjà, il s'affiche mal dans ma console avec psql sous windows et pas du tout dans pgadmin (j'ai tenté ça select '1234'::money;, il me retroune une ligne mais je ne vois rien dans ma cellule de résultat (PG 9.0.1 sous windows XP))
Vos avis sur ce type ?
Cordialement
voici quand même mon code :
SELECT tbl_tournee_trn.trn_date_prel, tbl_tournee_trn.trn_tournee, tbl_tournee_trn.trn_usine, tbl_valeur_mg.mg_matricule, tbl_valeur_mg.mg_val, tbl_valeur_mg.mg_val - lag (tbl_valeur_mg.mg_val, 1) over (partition by tbl_valeur_mg.mg_matricule order by tbl_tournee_trn.trn_date_prel) ecart FROM tbl_valeur_mg, tbl_tournee_trn WHERE tbl_tournee_trn.trn_id = tbl_valeur_mg.trn_id ;
encore merci
plus ça va plus j'aime postgreSQL!!
Bonjour, pouquoi ne pas utiliser une jointure de style inner join plutot que la clause where ?
Est ce que :
SELECT
tbl_tournee_trn.trn_date_prel,
tbl_tournee_trn.trn_tournee,
tbl_tournee_trn.trn_usine,
tbl_valeur_mg.mg_matricule,
tbl_valeur_mg.mg_val,
tbl_valeur_mg.mg_val - lag (tbl_valeur_mg.mg_val, 1)
over (partition by tbl_valeur_mg.mg_matricule
order by tbl_tournee_trn.trn_date_prel) ecart
FROM
tbl_valeur_mg inner join tbl_tournee_trn using (trn_id);
fonctionne ? mieux ?
Cordialement
Comme quoi, j'ai bien fait de demander!
Je n'avais pas du tout percuté que ton "1" et "2" devant les "any(array_agg..." était en fait les groupe 1 et 2.
Je pensais que c'était une notation (un peu comme quand on fait un order by 1,2 pour dire d'ordonner sur les deux premières colonnes).
Cette notation inversé est en fait un peu déroutante. On a pas l'habitude de voire la valeur comme premier argument de la condition.
Merci beaucoup
SELECT user_id from test group by user_id having not 1=any(array_agg(group_id)) and not 2=any(array_agg(group_id));
Bonjour Marc,
est-il possible d'avoir une petite explicaction sur la notation having not 1=any(array_agg(group_id)) and not 2=any(array_agg(group_id)); ?
je découvre array_agg, mais le reste est un peu abscon pour moi.
Cordialement
Effectivement,
pas la peine de concaténer le '1' pour avoir le premier jour de la semaine.
Je penses qu'on va avoir du mal à faire plus léger :-).
Il n'est même pas utile d'écrire une fonction.
Et en plus ça m'a permis de découvrir les subtilités IYYY et YYYY (on a pas le droit de mélanger de l'iso et du grégorien dans le formatage, donc il a fallu relire la doc et c'est la que j'ai découvert IYYY)
Cordialement
Ooops,
effectivement , j'avais intégré qu'il fallait donner le premier jour de la semaine pour une date donnée.
Un simple to_date('201001'||'1','IYYYIWID') ou '201001' est "l'année semaine" devrait alors faire l'affaire, non ?
Cordialement
Bonjour,
attention l'extraction de l'année de la premiere semaine peut poser problême :
exemple :
select extract(year from to_date('2010-01-01','YYYY-MM-DD')) donne 2010 alors qu'il s'agit en fait de la 53 semaine de l'année 2009 d'ou la demande d'isoyear :
select extract(isoyear from to_date('2010-01-01','YYYY-MM-DD')) qui donnera bien 2009
Voila ma (une) solution:
select to_date(extract(isoyear from to_date('2010-01-04','YYYY-MM-DD'))::text||to_char(extract(week from to_date('2010-01-04','YYYY-MM-DD')),'FM09')||'1','IYYYIWID')
select to_date(extract(isoyear from to_date('2010-01-01','YYYY-MM-DD'))::text||to_char(extract(week from to_date('2010-01-01','YYYY-MM-DD')),'FM09')||'1','IYYYIWID')
Bonsoir,
pourquoi pas to_date('2009-10-27','YYYY-MM-DD') dans ce cas ?
Le cast suffit-il juste parce que la date est issue d'une colonne typée date dans postgres et que nécessairement, il va la caster correctement ?
Cordialement
Hello,
essayes un peu comme ça alors :
Requete = "Select (entete_ot.date_validation - entete_ot.datemaintenance)::int
from Entete_OT where etc...
Si la colonne est déclaré comme une date, à mon avis, c'est pas la peine de la re-caster en faisant ::date.
Cordialement
PS: le but n'est pas de casser les nouveaux contributeurs, hein… au contraire. On essaye juste d'être aussi précis que possible dans les réponses, histoire que les gens ne repartent pas avec une demi-solution qui a l'air de marcher, comme on le voit malheureusement souvent dans les forums.
Donc ne pas s'offusquer si on a l'air de «repasser derrière vous pour en rajouter». On le fait même entre nous
Pas de soucis, Marc, si je lis ce forum c'est pour m'améliorer et je suis pas du style à m'offusquer quand quelqu'un prend la peine de compléter une réponse.
Cela dit, c'est curieux de devoir faire une conversion de dernière minute dans le calcul. A corire que les colonnes "entete_ot.date_validation" et "entete_ot.datemaintenance" d'unisol sont déclaré comme du simple texte au lieu d'être des colonne de type date.
Cordialement
Bonsoir,
VB retourne 45 converti en date '13/02/1900' qui est le 45eme jour de l'année 1900.
C'est une plaie fréquente sous excel qui fait la même chose lorsqu'on fait des opération sur des dates, il renvoie une date qu'il faut ensuite reconvertir en nombre standard.
Pour le cast sur la date, je suis on ne peu plus d'accord avec Marc Cousin, le cast ::date est risqué (je m'étais contenté de reprendre l'exemple donné par unisol (paresse quand tu nous tient)).
Cordialement
Bonjour,
et en faisant :
Requete = "Select (entete_ot.date_validation::date - entete_ot.datemaintenance::date)::int
from Entete_OT where etc...
Est-ce que ça ne résoud pas le pb ?
Cordialement