IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Travailler sur une semaine donnée en entrée par rapport à un mois et non à l'année


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Travailler sur une semaine donnée en entrée par rapport à un mois et non à l'année
    Bonjour,

    Après plusieurs recherches, me voilà bloqué !
    Ce que j'ai envie de faire, c'est que l'on me donne en entrée(Mois, Année et numéro de semaine dans le mois) et qu'ensuite je puisse par exemple faire la somme des montants sur cette période précise donnée.

    Exemple :

    Nom de la table : dataRentré
    Colonnes ci-dessous :

    DateSaisie Montant
    2014-01-01 2
    2014-01-02 2
    2014-01-08 2
    2014-01-09 2
    2014-01-16 2

    Si l'utilisateur me donne :
    Mois = 1 (MONTH(dateSaisie)='01')
    Année = 2014 (YEAR(dateSaisie)='2014')
    Semaine dans le mois = 2 ( ? )

    que je puisse lui donner en sortie : 4

    Merci de votre aide à tous ceux qui répondront

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Moi déjà je vois un problème dans ta conception, c'est comment tu définis la notion de "semaine dans le mois".

    En effet, si tu t'en tiens aux semaines "officielles", il très fréquent, en début et/ou fin de mois que les semaines soient à cheval sur 2 mois.
    Si tu t'en tiens aux semaines "officielles", il faudra traiter ce cas avec des semaines en début et fin de mois qui feront moins de 7 jours. Il faudra donc précisément connaitre le jour de fin (ou de début en fin de mois)de ta "micro" semaine.

    Ou alors ta notion de "semaine dans le mois" représente des blocs de 7 jours à partir du premier jour du mois, et indépendamment de toute semaine "officielle" ?
    Sachant qu'un mois (à l’exception de Février hors année bissextile) n'a pas un nombre de multiple de 7, tu auras donc de toute façon des "semaines" tronquées
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Pourquoi ne pas envisager de créer une table des semaines:
    Année
    Mois
    Numéro de semaine
    DateDebut
    DateFin

    Ainsi le problème se résume à une jointure, et la numérotation des semaines... à celui qui remplie cette table

    Tatayo.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Il n'y a pas de problème de conception.

    C'est aussi simple que :

    semaine 1 dans le mois de février va du 1 er au 7 ème jour
    semaine 2 dans le mois de février va du 8 eme au 15 ème jour
    semaine 3 dans le mois de février va du 16 eme au 23 ème jour
    semaine 4 dans le mois de février va du 24 eme jusqu'à la fin du mois

    Ainsi de suite pour tous les mois, on oublie les jours qui chevauchent ou pas.

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    La semaine 4 va du 24 à quoi? 28 ou la fin du mois quelque soit le mois ?

    Supposons que ce soit 28, et que donc il y aura aussi une 5ème semaine incomplète.

    Si on traduit en algorithme, semaine 1 du 1 au 7, semaine 2 du 8 au 14, etc
    on va trouver la formule
    du (1 + (numSem-1)*7) au (7 + (numSem-1)*7). Ces formules va te permettre de calculer la borne (jour) de début et la borne de fin pour une requete BETWEEN par exemple.

    Bien entendu, il y a quelques contrôles aux extrémités à mettre en place
    - Pas de numéro de semaine <1 sinon on aurait un jour de début négatif
    - Pas de borne supérieure au nombre de jour du mois. Il faut donc prendre le minimum entre le résultat de la seconde formule et le nombre de jour du mois
    - A voir aussi le cas du mois de février qui, 3 années sur 4, n'aura pas de 5ème semaine (et la 4ème fois, une semaine de 1 jour)
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    En fait la semaine 4 va du 24 a la fin du mois. ça peut être 28,29,30,31 selon le mois. Je croyais ce que je demandais simple mais personne n'a encore su écrire une requête sql qui fonctionne parce que je donne tous les paramètres nécessaires pour cela
    Mais merci quand même d'avoir pris le temps de répondre c est sympa

  7. #7
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Ah parce que tu veux que l'on te fasse ton boulot ?

    La requete est quasiment faite, je t'ai parlé de BETWEEN, t'ai donné le début* des formules pour la borne du début, et de la borne de fin. En plus comme tu n'a que 4 semaines et que la 4ème va jusqu'à la fin du mois, ça simplifie les choses. Tu as juste à mettre un mini contrôle sur la borne de fin pour la 4ème semaine. Perso je verrais bien un MIN entre le résultat de la formule pour une 5ème semaine et une fonction donnant le dernier jour du mois (ça doit certainement exister dans ton langage SQL)

    * les formules donnent le jour. Avec ce jour et les paramètres Mois et Année, faut reconstruire une date complète pour avoir la borne correspondante.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut ok modérateur
    Je n'ai pas envie d'avoir de problème lol
    Mais je peux quand même dire que je ne pense pas que c'est la bonne solution, j'en ai une mais je voulais savoir comment les autres allaient le résoudre, peut-être quelqu'un allait m'apprendre des requêtes secrètes que je ne connaissais pas bref
    Ou suis je obligé de prendre la réponse du modérateur ?

  9. #9
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Tu prends la réponse que tu veux, tu peux même ne pas en prendre. Ici, c'est du libre échange, il y a aucune obligation.

    Et si tu juges avoir une solution meilleure, tu peux même la poster pour la partager avec d'autres qui auraient un problème similaire et qui liraient ce fil. Mais là encore, il n'y a aucune obligation, c'est toi qui vois
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par mercisql Voir le message
    Je croyais ce que je demandais simple mais personne n'a encore su ecrire une requete sql qui fonctionnelle parce que je donne tous les parametres necessaires pour cela
    Vous n'avez même pas indiqué votre SGBDR. difficile donc de vous faire une requête toute prête, surtout s'il faut travailler sur les dates...

    Si vous avez une solution, postez la ! nous pourrons vous donner notre avis, ce sera surement plus constructif

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Citation Envoyé par mercisql Voir le message
    semaine 1 dans le mois de février va du 1 er au 7 ème jour
    semaine 2 dans le mois de février va du 8 eme au 15 ème jour
    semaine 3 dans le mois de février va du 16 eme au 23 ème jour
    semaine 4 dans le mois de février va du 24 eme jusqu'à la fin du mois
    C'est quand même relativement difficile de donner une réponse correcte à partir d’informations erronées.
    Comment justifies-tu que tes semaines durent soit 7 (semaine 1) soit 8 jours (semaines 2 et 3) ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/08/2014, 19h11
  2. [AC-2003] Accéder et travailler sur une base de données POSTGRESQL
    Par flet le kid dans le forum Modélisation
    Réponses: 3
    Dernier message: 01/05/2009, 19h34
  3. Réponses: 10
    Dernier message: 25/11/2007, 10h30
  4. Travailler sur une base de donnée
    Par nolan76 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 31/01/2006, 17h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo