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 du Club
    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
    Points : 50
    Points
    50
    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 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 370
    Points
    34 370
    Par défaut
    salut,
    tu peux regarder du côté de la fonction Year()

  3. #3
    Membre du Club
    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
    Points : 50
    Points
    50
    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 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 370
    Points
    34 370
    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;

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    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...

  6. #6
    Membre du Club
    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
    Points : 50
    Points
    50
    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 du Club
    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
    Points : 50
    Points
    50
    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
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    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.

+ 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