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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  requete sql pas facile ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

requete sql pas facile ...

n°1245917
kamelot1
Posté le 15-11-2005 à 12:42:22  profilanswer
 

Bonjour,
 
j'ai une requete SQL qui me bloque depuis quelque temps.
 
Je souhaite obtenir le nombre de nouveaux enregistrements ajoutees par rapport aux precedentes dates.
 
ex:Table
date  name
01/01/05              toto
01/01/05  tutu
01/02/05              toto
01/02/05              tutu
01/02/05  tata
01/03/05  toto
01/03/05  tutu
01/03/05  tata
01/03/05  tete
01/03/05  titi
 
resultat voulu:
01/01/05              toto
01/01/05     tutu  
01/02/05              tata
01/03/05              tete
01/03/05              titi
 
Avis aux experts SQL...
Merci de votre aide.
 

mood
Publicité
Posté le 15-11-2005 à 12:42:22  profilanswer
 

n°1245918
flo850
moi je
Posté le 15-11-2005 à 12:43:37  profilanswer
 

je comrpends pas la question  [:twixy]


---------------

n°1245925
olivthill
Posté le 15-11-2005 à 12:49:42  profilanswer
 

Je crois avoir trouvé la question (je chercherai la réponse plus tard), qui est comment lister les enregistrements contenant des noms qui n'existent pas dans des enregistrements pour une date inférieure (ou peut-être pour une date immédiatement inférieure).

n°1245927
kamelot1
Posté le 15-11-2005 à 12:51:41  profilanswer
 

flo850 a écrit :

je comrpends pas la question  [:twixy]


 
Zut, je n'ai pas ete assez clair.
 
En fait en janvier il y a eu 2 nouveaux enregistrements (toto et tutu), en fevrier 1 nouveau  (tata), en mars 2 nouveaux  (tete, titi)
 

n°1245928
betsamee
Asterisk Zeperyl
Posté le 15-11-2005 à 12:52:06  profilanswer
 

Code :
  1. select date,name
  2. from tatable
  3. group by name


Message édité par betsamee le 15-11-2005 à 12:52:46
n°1245929
olivthill
Posté le 15-11-2005 à 12:52:43  profilanswer
 

Et la réponse est :

SELECT t1.date, t1.name
  FROM Table t1
 WHERE
   (SELECT count (*)
    FROM Table t2
   WHERE t2.date < t1.date
    AND t2.name = t1.name) = 0;

Une autre question plus dure ?

n°1245932
kamelot1
Posté le 15-11-2005 à 12:54:42  profilanswer
 

olivthill a écrit :

Je crois avoir trouvé la question (je chercherai la réponse plus tard), qui est comment lister les enregistrements contenant des noms qui n'existent pas dans des enregistrements pour une date inférieure (ou peut-être pour une date immédiatement inférieure).


 
 
tout juste, c'est ce que je cherche Olivthill.

n°1245940
kamelot1
Posté le 15-11-2005 à 13:09:52  profilanswer
 

olivthill a écrit :

Et la réponse est :

SELECT t1.date, t1.name
  FROM Table t1
 WHERE
   (SELECT count (*)
    FROM Table t2
   WHERE t2.date < t1.date
    AND t2.name = t1.name) = 0;

Une autre question plus dure ?


 
c'etait pas facile pour moi :-(.
En tout cas merci.
 
Mais par contre qu'est ce que c'est lent (5min pour 3000 enregistrements) ...........

n°1245942
betsamee
Asterisk Zeperyl
Posté le 15-11-2005 à 13:17:26  profilanswer
 

ma solution ne fonctionne pas?

n°1245987
mrbebert
Posté le 15-11-2005 à 14:01:38  profilanswer
 

En fait, le résultat voulu, c'est la date à laquelle apparaît chacune des valeurs présentes :??:  
 
SELECT name,  MIN(date)
FROM Table
GROUP BY name
 
(si c'est ca, ca risque d'être un poil plus rapide :o )

mood
Publicité
Posté le 15-11-2005 à 14:01:38  profilanswer
 

n°1246035
orafrance
Posté le 15-11-2005 à 14:48:58  profilanswer
 

SELECT COUNT(*) = 0 ->  NOT EXISTS ou NOT IN ou HAVING COUNT(*) = 0
 
ce sera plus performant déjà :)

n°1246098
kamelot1
Posté le 15-11-2005 à 15:57:13  profilanswer
 

betsamee a écrit :

ma solution ne fonctionne pas?


 
Ca marche aussi et c'est rapide. Mais ca ne me parait pas tres logique.
Et comment ferais-tu pour compter le nombre d'entrees nouvelles (avec count). le resultat devrait etre:  
2
1
2
 
 
 
 
 

n°1246216
Beegee
Posté le 15-11-2005 à 17:25:38  profilanswer
 

Je comprends pas trop la question, tu veux compter quoi exactement ?
 
Si c'est le nombre total d'entrées nouvelles par jour :
 
SELECT t1.date, COUNT(DISTINCT t1.name)
FROM maTable t1
WHERE NOT EXISTS
(SELECT 1
 FROM maTable t2
 WHERE t2.name = t1.name
 AND t2.date < t1.date)
GROUP BY t1.date;


Message édité par Beegee le 15-11-2005 à 17:28:08

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

  requete sql pas facile ...

 

Sujets relatifs
Requete VB (numero auto)Requete SQL
requete bizard[ACCESS] probleme cumul sur requete
Problème Requete / Timestamppetit probleme avec requete Delete je pense facile mais je vois pas
[ SQL ] requête facile, pour vous les boss[SQL] Merci de m'aider à faire cette requete... facile pour un pro ;)
requete sql facile mais particuliere??requete sur plusieurs tables en sql....surement facile MAis...
Plus de sujets relatifs à : requete sql pas facile ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR