requete sql pas facile ...

requete sql pas facile ... - SQL/NoSQL - Programmation

Marsh Posté le 15-11-2005 à 12:42:22    

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.
 

Reply

Marsh Posté le 15-11-2005 à 12:42:22   

Reply

Marsh Posté le 15-11-2005 à 12:43:37    

je comrpends pas la question  [:twixy]


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

Reply

Marsh Posté le 15-11-2005 à 12:49:42    

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).

Reply

Marsh Posté le 15-11-2005 à 12:51:41    

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)
 

Reply

Marsh Posté le 15-11-2005 à 12:52:06    

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


Message édité par betsamee le 15-11-2005 à 12:52:46
Reply

Marsh Posté le 15-11-2005 à 12:52:43    

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 ?

Reply

Marsh Posté le 15-11-2005 à 12:54:42    

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.

Reply

Marsh Posté le 15-11-2005 à 13:09:52    

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) ...........

Reply

Marsh Posté le 15-11-2005 à 13:17:26    

ma solution ne fonctionne pas?

Reply

Marsh Posté le 15-11-2005 à 14:01:38    

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 )

Reply

Marsh Posté le 15-11-2005 à 14:01:38   

Reply

Marsh Posté le 15-11-2005 à 14:48:58    

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

Reply

Marsh Posté le 15-11-2005 à 15:57:13    

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
 
 
 
 
 

Reply

Marsh Posté le 15-11-2005 à 17:25:38    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed