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

Requêtes et SQL. Discussion :

couper une période par année


Sujet :

Requêtes et SQL.

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 57
    Par défaut couper une période par année
    bonjour,

    j'ai une requête dans laquelle j'ai les champs appareil, prix_jour, début_loc, fin_loc.
    je souhaite en fait connaitre le prix annuel de l'appareil. je cherche donc à compter le nombre de jours par an pendant lesquels l'appareil est loué. ce serait une requête avec les champs appareil,2008,2009,2010

    j'ai eu une idée avec des Iif les uns dans les autres, mais c'est très lourd... du genre iif(début<#01/01/2008 And fin>#31/12/2008#, ...)

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    tu peux regarder du côté de la fonction Year()
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 57
    Par défaut
    ça pose le même problème : il faut distinguer le cas où year(début_loc)<2008, =2008 ou >2008 , et pareil pour fin_loc...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Pas nécessairement, un exemple:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(MonChampDate), MonChampAppareil From MaTable WHERE Year(MonChampDate) = 2008 GROUP BY MonChampAppareil;
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Prenons ça dans l'ordre...
    Citation Envoyé par 4rn0_o Voir le message
    je souhaite en fait connaitre le prix annuel de l'appareil. je cherche donc à compter le nombre de jours par an pendant lesquels l'appareil est loué.
    La requête suivante devrait te donner par appareil le nombre de jours de loocation dans l'année 2008 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tonidentifiantappareil, sum(fin_loc - debut_loc + 1) AS nbJours
    FROM tatableappareils
    WHERE year(debut_loc) = 2008 AND year(fin_loc) = 2008
    Petit bémol : ne sont prises en compte que les locations commencées et terminées en 2008. Si tu veux les locations à cheval sur deux années, il va falloir chercher un peu plus et je n'ai pas le temps maintenant.

    ce serait une requête avec les champs appareil,2008,2009,2010
    Ca c'est plus difficile et s'apparente à de la cosmétique. SQL peut te donner, classé par appareil puis par année, le nombre de jours de location et, par calcul, le coût de la location.
    Mais là encore, je manque de temps.

    En espérant que cette première piste puisse t'aider...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 57
    Par défaut
    merci pour vos réponse. j'avance un peu, mais j'ai du mal.
    pour l'instant j'ai un truc un peu branlant basé sur des vraifaux. c'est pas beua à voir mais j'ai l'impression que ça fonctionne

    quand tu dis que c'est de la cosmétique, ça veut dire quoi ? l'objectif est d'avoir un budget prévisionnel des locations.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 57
    Par défaut
    solution trouvée. par un hasard(?) mathématique assez amusant, en fait il suffit de prendre le minimum parmi ces 4 valeurs : (pour 2008 par exemple)
    01/01/2009-débutloc
    01/01/2009-01/01/2008
    finloc-débutloc
    finloc-01/01/2008

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    A mon avis il manque quelque chose :
    01/01/2009-débutloc --> avec debutloc en 2008
    01/01/2009-01/01/2008 --> ça on sait que ça fait 366 !
    finloc-débutloc --> avec debutloc et finloc en 2008
    finloc-01/01/2008 --> avec finloc en 2008

    A vérifier quand même avec des cas concrets ce truc !

    De plus, avec ton système, une location qui commence le 01/02/2008 et qui se termine le 01/02/2008 aura pour durée : 0 jours ! Il faut ajouter 1 à la soustraction de dates de début et de fin.

    Attention, ce n'est pas toujours vrai ! Si un hôtel enregistre la date d'arrivée et la date de départ d'un client, la soustraction suffit pour compter le nombre de nuits à facturer.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Décomposer une période par mois
    Par tnguyen05 dans le forum Développement
    Réponses: 9
    Dernier message: 18/06/2013, 12h13
  2. Repartion d'une période par mois
    Par tnguyen05 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/05/2013, 23h39
  3. Format year4. : faire une table par année
    Par ludo35 dans le forum SAS Base
    Réponses: 12
    Dernier message: 13/04/2011, 14h29
  4. [XL-2003] Ajout d'une ligne par année
    Par korni184 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/08/2010, 11h45
  5. une fiche par année et par salarié
    Par surzone dans le forum Modélisation
    Réponses: 3
    Dernier message: 03/09/2007, 17h52

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