Accueil > Forum > > > > Problème de dates
Problème de dates
jeudi 1 décembre 2005 à 13:57:35 |
Problème de dates

Antilope
|
Bonjour, Je dispose d'une table avec les colonnes suivantes : date_debut, date_fin,montant_facture. Une facture porte sur la période date_debut à date_fin. Je recherche le nombre de mois facturés. Par exemple, j'ai : 01/01/2005 - 15/01/2005 01/02/2005 - 28/02/2005 01/02/2005 - 31/03/2005 01/05/2005 - 31/05/2005 Dans ce cas la requete doit retourner 3,5 mois. Antilope
|
|
jeudi 1 décembre 2005 à 15:51:31 |
Re : Problème de dates

aieeeuuuuu
|
salut
quel SGBDR utilises-tu ?
il existe des fonction toutes faites pour calculer des différences entre deux dates, mais elles differents de l'un a l'autre
exemple pour SQL server, pour recuprer le nombre de jours entre deux dates
DATEDIFF('dd', dateDepart, dateFin)
|
|
jeudi 1 décembre 2005 à 15:55:19 |
Re : Problème de dates

Antilope
|
Je travaille sous Oracle.
Il existe effectivement des fonctions pour faire des différences entre 2 dates, mais je n'arrive pas à les utilisé. Dans le cas que je présente, je ne dois pas compter deux fois le mois de Février par exemple, et je ne dois pas compter du tout le mois d'avril.
Antilope
|
|
vendredi 2 décembre 2005 à 11:19:58 |
Re : Problème de dates

aieeeuuuuu
|
Réponse acceptée !
ok... je comprend mieux ton probleme. et il est plutot complexe...
a premiere vue, je ne vois pas trop comment t'en sortir avec une simple requete. peut etre que quelqu'un ici aura une idée.
sinon ce que je ferai c'est une procedure stockée de la sorte :
1 - création d'une table temporaire jJOURS(jour (date), facturation (integer))
2 - tu remplis cette table, avec tous les jours de la plage a couvrir (ici, tous les jours du 01/01/2005 au 31/05/2005), et avec le champs 'facturation' a 0
3 - pour chaque jour de cette table, tu mets le champs facturation a 1 pour tous les jours ayant été facturés, en comparant avec ta table de facturation
4 - tu fais la somme du champs 'facturation' de ta table temporaire.
5 - la tu aura le nombre de jours facturés, reste plus qu'a le convertir en nombre de mois (par exemple diviser par 30,5, ca devrait donner un resultat a peu près correct, tous dépend de la précision que tu veux obtenir, à toi de voir).
|
|
lundi 5 décembre 2005 à 09:16:55 |
Re : Problème de dates

Antilope
|
Merci, tu m'as donné une bonne idée, qui me servira sans doute dans d'autres projets :
Je vais créer une table calendrier avec toute les dates de l'année et des années avenir. Puis je vais faire une jointure avec cette table. Le resultat me donnera la table temporaire. J'espère qu'en temps de traitement ca va être tolérable .... Mon but final est d'obtenir une moyenne mensuelle du montant facturé pour chaque client, dans le cadre de statistiques donc je ne cherche pas la précision.
Antilope
|
|
mardi 6 décembre 2005 à 10:11:04 |
Re : Problème de dates

Antilope
|
Ca marche, mais comme je le craignais je suis passée de 20 mn avec un resultat faux à plus d'1 h avec un résultat bon. Bah .. l'impotant c'est que ce soit bon  ! Antilope
|
|
mardi 6 décembre 2005 à 14:09:13 |
Re : Problème de dates

aieeeuuuuu
|
1 heure ?
comment fais tu ?
met nous le ode si tu veux n peut jeter un oeil
je pense qu'en ajoutant un index bien placé, tu peux aller beaucoup plus vite que ca...
tu as combien de commandes dans ta table ?
|
|
mardi 6 décembre 2005 à 14:15:31 |
Re : Problème de dates

Antilope
|
Ma requête tourne au sein d'un gros PL/SQL qui fait plein d'autres choses et mettait 20 minutes avant mais je comptais plusieurs fois le même mois.
Je vais l'isoler d'abord pour y voir plus clair ...
Antilope
|
|
vendredi 16 décembre 2005 à 10:26:15 |
Re : Problème de dates

Antilope
|
Ca y est, je m'en suis sortie avec une pirouette digne d'un athlète de haut niveau :
Une fois isolée ma requête initiale met 5 mn.
Ma premiere solution était de créer une table contenant toutes les dates puis de faire une jointure avec ma table. La voici :
select /*+ choose*/ sum(totnb) into wnb from ( select decode(sign(sum(nb)-1),1,1,sum(nb)) totnb,mois from -- on compte au plus 1 par mois ( select distinct mois, months_between(dateFin,dateDepart) nb from cal_date, factures where 1=1 and la_date between dateDepart and dateFin and ... /* restrictions sur factures */ ) group by mois);
En mode rule, la requete met 50 mn ! en choose (c'est un peu mieux) : 30 mn ! Sur une facture le résultat est immédiat et correct, mais sur l'ensemble de l'historique ...aie ... aie ... aie.
J'ai opté pour une autre solution ( résultat 7 mn) :
J'utilise un tableau de 12 cases.
Je parcours les factures de chaque compte via un curseur et pour chacune d'elle j'apelle une procedure trait(debut,fin) qui remplie les cases( +1 si c'est un mois entier, + un chiffre entre 0 et 1 sinon). (La premiere case correspond à janvier .. la dernière à décembre).
Si dans une case j'ai plus qu'1 (il y a eu plusieurs factures sur le mois), je compte 1. J'additionne tout ça et voilà ....
Antilope
|
|
Cette discussion est classée dans : fin, problème, date, dates, debut
Répondre à ce message
Sujets en rapport avec ce message
Problème de date [ par kidpigeyre ]
Voila mon problème : Je dois afficher les emplacements libres d'un certain type entre deux dates (date_debut et date_fin) en sql access.Voici mes deux
Date format... [ par elpens ]
Bonjour,j'ai quelques procedures stockees qui utilisent des dates. Mon problème (si on peux appeler cela un problème), est que je ne sais pas quelle e
problème de requette [ par beny100 ]
bonjour,j'ai un problème avec ma requette. voiçi le code:select * from Alarme_active where date_debut >='31/01/2007'and date_debut='01/02/2007'elle ne
condition "WHERE" avec des dates [ par folvool ]
Bonjour, Je n'ai pas trouver d'explications à mon problème sur le web. Le voici, mon problème : J'ai une table contenant un champ nommé "datefin" qu
Une requete qui renvoie NULL [ par fzed51 ]
SELECT SUM((HOUR(Fin)*60+MINUTE(Fin))-(HOUR(Debut)*60+MINUTE(Debut))) FROM horaire WHERE (WEEK(Date, 1)=1);Cette requète doit renvoyer la somme (en m
SELECT entre 2 Dates [ par Nitrakz ]
Bonjour, Mon problème est le suivant, je ne parviens pas a limiter mon select a un intervalle entre 2 dates ou 1 date saisi manuellement par un utili
Problème avec une requête sur une date [ par Egautier18 ]
Bonjour, Dans le cadre d'un stage il me faut réaliser une base de donnée sous access. Je suis face à un problème que voici : J'ai créer un formulaire
Resource id #13 [ par raurau ]
Bonjour à tousAprés cette requete, j'ai ce message : Resource id #13Je ne comprends pasVoici la requeterequire ("../include/baseassoc.inc");
Problème Trigger SQL [ par ninho44 ]
Bonjour,J'ai un trigger qui n'est pas très compliqué, mais j'ai quand même un problème avec.J'ai une table RESERVATION, avec trois champs ( logement,d
Problème de copnversion Access -> SQL Server 2000 champs Date [ par NHenry ]
BonjourJ'ai un problème : Lorsque j'utilise l'assistant d'importation/exportation de données entre Access et SQL Server 2000, il me convertit les cha
Livres en rapport
|
Derniers Blogs
QUELQUES TRUCS INTéRESSANTS (05/09/2010)QUELQUES TRUCS INTéRESSANTS (05/09/2010) par coq
Cette fois-ci : .NET Debug / Performance Sécurité SQL Server .NET Determining if a type is defined in the .NET Framework (blog de Scott Dorman) Ha tiens, je n'avais jamais vraiment pensé à utiliser le jeton de clé publique...
Cliquez pour lire la suite de l'article par coq ENUMERABLECOLLECTIONENUMERABLECOLLECTION par Matthieu MEZIL
Prenons le scénario suivant. On utilise MVVM. On a les deux classes suivantes dans le model : public class Child { } public class Parent { private ObservableCollection < Child > _children; public ObservableCollection < Child > Children { get {...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [HS] CHROME 6 + MOI = COUP DE GUEULE ![HS] CHROME 6 + MOI = COUP DE GUEULE ! par JeremyJeanson
Attention, le poste qui suit n'est pas la complainte d'une personne : Qui n'aime pas Chrome. D'un anti Google. D'un développeur qui a un poil énorme dans la main. Ceux qui me fréquentent savent que je change de navigateur favori tous les 2 ou 3 mois afin ...
Cliquez pour lire la suite de l'article par JeremyJeanson [WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7[WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7 par Audrey
Lors de la réalisation de ma 2ème application Windows Phone 7, j'ai souhaité utiliser un WrapPanel pour afficher plusieurs photos. Mais le contrôle WrapPanel ne fait pas parti de la liste des contrôles inclus dans le SDK de la version Beta des outils pour...
Cliquez pour lire la suite de l'article par Audrey [WP7] BESOIN D'AVOIR DES DONNéES EN CACHE[WP7] BESOIN D'AVOIR DES DONNéES EN CACHE par Nicolas
Les développeurs ASP.NET ont l'habitude de mettre des données en cache pour éviter de requêter a chaque fois la base de données. Et il est toujours utilie de penser que vos utilisateurs mobiles n'ont pas troujours une super connexion 3G/WIFI et un for...
Cliquez pour lire la suite de l'article par Nicolas
Logiciels
WebLogAndPass (1.0.0)WEBLOGANDPASS (1.0.0)WebLogAndPass est un logiciel permettant de mémoriser vos sites préférés et pour chacun d'entre-e... Cliquez pour télécharger WebLogAndPass uTorrent (2.0.4)UTORRENT (2.0.4)C'est un client BitTorrent très puissant et très performant. Comme son nom l'indique, uTorrent (m... Cliquez pour télécharger uTorrent Bureau de Gestion - ERP Devis Facturation (2.02)BUREAU DE GESTION - ERP DEVIS FACTURATION (2.02)- Version gratuite du 10/06/2010
Le Bureau de Gestion est un logiciel dédié à la gestion de l'en... Cliquez pour télécharger Bureau de Gestion - ERP Devis Facturation 4Videosoft Transfert iPod Mac (3.2.08)4VIDEOSOFT TRANSFERT IPOD MAC (3.2.08)4Videosoft Transfert iPod-Mac caractérise principalement à transférer les fichiers iPod vers Mac.... Cliquez pour télécharger 4Videosoft Transfert iPod Mac 4Videosoft HD Convertisseur (3.3.08)4VIDEOSOFT HD CONVERTISSEUR (3.3.08)Etant le meilleur HD Vidéo Convertisseur, 4Videosoft HD Convertisseur, vous pouvez regarder la vi... Cliquez pour télécharger 4Videosoft HD Convertisseur
|