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 :

SQL Date et soustraction de table


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 124
    Points : 81
    Points
    81
    Par défaut SQL Date et soustraction de table
    Bonjour,

    N'ayant pas fais de requête bien compliquer depuis 4 ans je suis comme newbi en SQL.
    Voila considérons j'ai une table dow jones comme ceci :
    ID, Date, Open, High, Low, Close, Volume, Adj_Close

    Et j'aimerais faire apparaitre par un requête uniquement les date et cours de cloture de l'année c-ad au 31/12/20XX
    Le probleme est que lorsque je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT ID, Date, CLOSE
    FROM DowDaily
    WHERE month(Date)=12 and day(Date)=31
    Forcement si le 31/12 il n'y a pas eu de cotation elle n'existe pas dans ma table et donc je n'aurais pas de cours ni date pour cette année la.
    J'aimerais donc pouvoir prendre le dernier cours de l'année. Auriez vous un astuce?

    problème 2 :
    Une fois que j'ai ceci,
    j'aimerais calculer les rendements d'une année à l'autre en faisant (R(n)-R(n-1))/R(n-1)
    Je sias que par les requêtes access il faut prendre 2 fois les tables des cours et de faire quelques chose en plus.
    Mais j'aimerais la rédiger en SQL, Pouvez vous m'aider?

    Merci
    Dumbl

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,


    Je suis parti de cette table :




    Cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DownDaily.ID, DownDaily.Close AS [Dernier cours A-1], DownDaily.Date AS [Date A-1], DownDaily_1.Close AS [Dernier cours A], DownDaily_1.Date AS [Date A]
    FROM DownDaily INNER JOIN DownDaily AS DownDaily_1 ON DownDaily.ID = DownDaily_1.ID
    WHERE (((DownDaily.Date)=DMax("Date","DownDaily","year([Date])=" & [Année A-1] & "  and ID =" & [DownDaily].[ID])) AND ((DownDaily_1.Date)=DMax("Date","DownDaily","year([Date])=" & [Année A] & "  and ID =" & [DownDaily].[ID])));
    Te donne ceci :



    Est-ce ce que tu souhaites ?

    La db exemple : http://claudeleloup.developpez.com/F...40405dumbl.mdb
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Les fonctions de domaines sont une plaie au niveau des performances.

    Il sera préférable ici, dans une première requête d'établir la date de dernière séance par année Max(LaDate) ... GROUP BY Year(LaDate).

    De faire une jointure INNER JOIN entre cette première requête et la table principale sur la date.

    Il est largement plus performant d'avoir plusieurs tables dans les jointures que des produits cartésiens

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 124
    Points : 81
    Points
    81
    Par défaut
    Hello ClaudeLeLoup,

    je vais mieux m'expliquer.

    J'ai mettons les données quotidienne du dow jones.
    Et ce que je cherche à faire c'est prendre le dernier cours de chaque année.

    Cordialement
    Dumbl

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    J'ai mettons les données quotidienne du dow jones.
    Et ce que je cherche à faire c'est prendre le dernier cours de chaque année.
    N'est-ce pas ce que j'obtiens ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 124
    Points : 81
    Points
    81
    Par défaut
    En fait tu me fais la soustraction avant d'avoir ce que je veux. (Je veux le rendement de l'année mais c'est pareil, il me faut dabord chaque cours de fin d'année)

    j'ai la table du Dow de tout les cours quotidiens.
    Et pour chaque année je veux récupérer le dernier enregistrement de l'année.

    Le problème c'est que si je fais celà :
    SELECT *
    FROM dow
    where Day(dat)=31 & Month(dat)=12;
    cela me sort donc chaque cours où ça match 31/12/XX
    mais je veux même quand il y a pas de cotation le 31/12/XX, le 30/12/XX par exemple si elle existe, la date maximum de l'année quoi.

    Merci pour l'aide.
    Dumbl

  7. #7
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    En fait tu me fais la soustraction avant d'avoir ce que je veux. (Je veux le rendement de l'année mais c'est pareil, il me faut dabord chaque cours de fin d'année)


    Ma réponse te donne les deux derniers cours des deux années.
    Pour le calcul du rendement, il te suffit d’ajouter une colonne !
    Voici le SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DownDaily.ID, DownDaily.Close AS [Dernier cours A-1], DownDaily.Date AS [Date A-1], DownDaily_1.Close AS [Dernier cours A], DownDaily_1.Date AS [Date A], ([Dernier cours A]-[Dernier cours A-1])/[Dernier cours A-1] AS Rendement
    FROM DownDaily INNER JOIN DownDaily AS DownDaily_1 ON DownDaily.ID = DownDaily_1.ID
    WHERE (((DownDaily.Date)=DMax("Date","DownDaily","year([Date])=" & [Année A-1] & "  and ID =" & [DownDaily].[ID])) AND ((DownDaily_1.Date)=DMax("Date","DownDaily","year([Date])=" & [Année A] & "  and ID =" & [DownDaily].[ID])));
    et le résultat

    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 124
    Points : 81
    Points
    81
    Par défaut

    je comprend pas trop ce que tu me fais
    en fait je veux juste que la requête me liste le dernier cours de chaque année,
    bon je m'inspire de ce que tu as fais et je te donne une réponse xD

    Merci pour l'aide c'est
    Dumbl

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 124
    Points : 81
    Points
    81
    Par défaut
    Bon j'ai fais ma requête,
    elle est faite en 2 temps :
    La requête LastCotCAC40 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT YEAR([DateC]) AS annee, LAST(CACDayly.CloseC) AS endC
    FROM CacDaily
    GROUP BY YEAR(DateC);
    puis la requête ReturnCAC40 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [LastCotCAC40].annee+1 AS anneeRend, [LastCotCAC40].endC AS coursPrec, [LastCotCAC40_1].endC AS coursN, (coursN-coursPrec)/coursPrec as rendCac
    FROM LastCotCAC40 INNER JOIN LastCotCAC40 AS LastCotCAC40_1 ON [LAStCotCAC40].annee=[LASTCotCAC40_1].annee-1
    WHERE [LASTCotCAC40].annee+1<2014;
    Merci pour l'aide. Je clos ce topic
    Dumbl

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

Discussions similaires

  1. Tranformation Date en Float vers Tables SQL ?
    Par claudetom dans le forum Développement de jobs
    Réponses: 10
    Dernier message: 30/09/2009, 10h40
  2. Requette de joiture sql avec au moin 3 tables
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/03/2004, 08h10
  3. Soustraction de table
    Par Shea13 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/02/2004, 12h37
  4. [Date][SQL date][Format] insertion d'une heure
    Par goulime dans le forum JDBC
    Réponses: 11
    Dernier message: 26/01/2004, 11h38
  5. SQL Date
    Par hamed dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/11/2003, 15h18

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