Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
389 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] requete: combler les "vides" dans une table avec des donnees

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] requete: combler les "vides" dans une table avec des donnees

n°2054197
ztg
Posté le 04-02-2011 à 03:54:51  profilanswer
 

salut a tous
 
admettons que j'aie une table (date, nombre) avec admettons pour simplifier 1 entree maximum par date (mais possiblemenent 0)
 
je cherche a faire une query qui me retourne les 10 derniers jours sous forme couples (date, nombre) en comblant les trous
 
cad si aujourd'hui est le 03 fevrier et qu'il manque le 1er fevrier, j'aimerais que ma query retourne (je mets des 4 partout pour le nombre pour faciliter):
 
2011-02-03, 4
2011-02-02, 4
2011-02-01, 'NULL'
2011-01-31, 4
2011-01-30, 4
2011-01-29, 4
etc
 
 
est ce possible via une requete un peu rusee (postgresql) ?

mood
Publicité
Posté le 04-02-2011 à 03:54:51  profilanswer
 

n°2054201
skeye
Posté le 04-02-2011 à 08:00:37  profilanswer
 

Pourquoi le faire en sql? Il y a un langage appelant, en-dessous? Demander au sgbd de retourner des données vides n'a pas un intérêt fabuleux non?


---------------
Can't buy what I want because it's free -
n°2054210
Oliiii
Posté le 04-02-2011 à 08:42:03  profilanswer
 

Avec SQL Server il y a moyen (le principe est probablement correct pour les autres SGBD aussi):
Faire un Left join avec une table contenant toutes les dates, ca te permettra de generer les trous.
 
La table avec toutes les dates peut etre generée a la volée (avec des comon table expression) si tu veux que tout tienne dans une seule query.
 
Voila ce que ca donne pour SQL Server:

Code :
  1. ;with cte10 (n) AS (
  2.     SELECT 1 union ALL SELECT 1 union ALL
  3.     SELECT 1 union ALL SELECT 1 union ALL
  4.     SELECT 1 union ALL SELECT 1 union ALL
  5.     SELECT 1 union ALL SELECT 1 union ALL
  6.     SELECT 1 union ALL SELECT 1
  7.     ),
  8.     cte100 (n) AS (SELECT 1 FROM cte10 a, cte10 b),
  9.     cte10k (n) AS (SELECT 1 FROM cte100 a, cte100 b),
  10.     cte100m (dte) AS (SELECT top 50000 CONVERT(datetime,ROW_NUMBER() OVER (ORDER BY a.n) - 1) FROM cte10k a, cte10k b)
  11. SELECT a.dte, b.nombre
  12. FROM cte100m a
  13.     LEFT JOIN @tmpTable b ON b.date = a.dte
  14. WHERE a.dte BETWEEN '2011-01-29' AND '2011-02-03'


 
Résultats:
dte nombre
2011-01-29 00:00:00.000 4
2011-01-30 00:00:00.000 4
2011-01-31 00:00:00.000 4
2011-02-01 00:00:00.000 NULL
2011-02-02 00:00:00.000 4
2011-02-03 00:00:00.000 4


Message édité par Oliiii le 04-02-2011 à 08:42:27
n°2054452
ztg
Posté le 04-02-2011 à 18:00:44  profilanswer
 

>skeye
 
oui tu as probablement raison, ca serait plus propre
 
>Oliii
 
j'ai pense au outer join mais bon... c'est pas super elegant :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] requete: combler les "vides" dans une table avec des donnees

 

Sujets relatifs
[Résolu][PHP/SQL] Ajout variable données inscrite dans bdd par tierce[RESOLU] Petite aide rapide sur SQL
Quel gestionnaire de données pour des relations logiquesRequête PDO Statement
requete sqlMysql 5/SQLServer - Cherche grosse base de données
[SQL] Logique de Conceptionrequete SQL qui ne donne pas le bon resultat
Plus de sujets relatifs à : [SQL] requete: combler les "vides" dans une table avec des donnees


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR