SQL - Simplifier requêtes
Callie33
Messages postés
150
Statut
Membre
-
Callie33 Messages postés 150 Statut Membre -
Callie33 Messages postés 150 Statut Membre -
Bonjour à tous,
Voici un échantillon de la table de j'utilise :
Pour un company_symbol, je veux :
Calculer (open for a date)/(close for an other date) - 1
Le nombre de lignes où open > close
Le nombre de lignes où open < close
Le nombre de jours où company_symbol a le plus grand close
Le nombre de jours où company_symbol a le plus petit close
Voici les requêtes que j'ai faites :
Pour la 4, ça ne fonctionne pas, pourriez-vous m'aiguiller ?
Aussi, serait-il possible de simplifier chacune des requêtes, ou même les réunir en une seule ?
Merci d'avance,
Callie
Voici un échantillon de la table de j'utilise :
| eod_id | company_symbol | date | open | close | high | low | | 1 | AAA | 01-01-2000 | 40.00 | 42.00 | 43.00 | 39.00 |
Pour un company_symbol, je veux :
Calculer (open for a date)/(close for an other date) - 1
Le nombre de lignes où open > close
Le nombre de lignes où open < close
Le nombre de jours où company_symbol a le plus grand close
Le nombre de jours où company_symbol a le plus petit close
Voici les requêtes que j'ai faites :
SELECT (SELECT OPEN FROM eod WHERE company_symbol="AAPL" AND DATE="2013-04-05") / (SELECT OPEN FROM eod WHERE company_symbol="AAPL" AND DATE="2000-01-03") - 1;
SELECT COUNT(*) FROM eod WHERE company_symbol="AAPL" AND CLOSE>OPEN;
SELECT COUNT(*) FROM eod WHERE company_symbol="AAPL" AND CLOSE<OPEN;
SELECT COUNT(*) FROM EOD WHERE company_symbol IN (SELECT company_symbol FROM eod WHERE CLOSE IN (SELECT max(CLOSE) FROM eod GROUP BY DATE));
Pour la 4, ça ne fonctionne pas, pourriez-vous m'aiguiller ?
Aussi, serait-il possible de simplifier chacune des requêtes, ou même les réunir en une seule ?
Merci d'avance,
Callie
1 réponse
-
Bonjour,
Pour les 3 premières requêtes, difficile de faire plus simple...
Pour la 4, je ferais comme ceci :SELECT count(*) FROM EOD WHERE CLOSE = (SELECT MAX(CLOSE) FROM EOD WHERE COMPANY_SYMBOL = 'AAPL') GROUP BY DATE
Et pour la 5, remplacer le MAX par un MIN.
J'espère que ça peut aider :-)
A+ !
-
-
-
Pourquoi pas, mais c'est plutôt pour un company_symbol donné.
En fait, c'est une table qui contient des valeurs boursières. company_symbol est le nom de l'action, est close la valeur de l'action à la fermeture d'une journée.
Le but de la requête est de savoir pour une action, sur une période donnée, le nombre de fois où elle a été l'action la plus chère à la fermeture (close).
C'est plus clair comme ça ? -
le nombre de fois où elle a été l'action la plus chère à la fermeture (close)
Ce n'est pas plutôt le nombre de fois où elle a été à son meilleur niveau à la fermeture ?
Ce qui donne :SELECT COMPANY_SYMBOL, count(*) as "Nb_de_jours" FROM EOD WHERE COMPANY_SYMBOL = "AAPL" AND CLOSE = (SELECT MAX(CLOSE) FROM EOD WHERE COMPANY_NAME = "AAPL") GROUP BY COMPANY_SYMBOL
S'il faut chercher le nombre de jours où l'action a été la plus chère à la fermeture, il faut trouver le plus haut CLOSE de toute la tables sans critère sur l'action :SELECT COMPANY_SYMBOL, count(*) as "Nb_de_jours" FROM EOD WHERE COMPANY_SYMBOL = "AAPL" AND CLOSE = (SELECT MAX(CLOSE) FROM EOD) GROUP BY COMPANY_SYMBOL
-
-