Select delete

Résolu/Fermé
guillaumeG41 Messages postés 31 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 14 août 2011 - 5 juin 2010 à 05:33
guillaumeG41 Messages postés 31 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 14 août 2011 - 14 août 2011 à 20:21
Bonjour, j'ai une table de log contenant un champ id , un champs adresse IP et un champs date.

La table se rempli a chaque fois qu'il y a une requête sur une page.

j'aimerai voir la première date de connexion pour chaque adresse IP distinct.

j'arrive a voir les adresse ip different par :
select distinct ip from log
peut on rajouter un champs dans le select en gardant le DISTINCT sur le champs IP.

et par la suite j'aimerai supprimer le reste de la table en gardant chaque premiere connexion d'une adresse ip distinct

Merci de vos reponses

3 réponses

Salut,

Pour la sélection
Ce que tu veux faire est un regroupement sur la colonne ip. À un regroupement, on associe une (ou des) fonction(s) récapitulative(s) parmi : MIN, MAX, SUM, AVG et COUNT
tu feras donc :
select ip, min(date_connexion)
from log
group by ip

pour supprimer ce qui n'est pas listé ci dessus, tu devras faire
delete from log
where (ip, date_connexion) not in (
  select ip, min(date_connexion)
  from log
  group by ip
)
1
guillaumeG41 Messages postés 31 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 14 août 2011 2
Modifié par guillaumeG41 le 5/06/2010 à 16:01
salut , et merci de ta réponse si rapide.

le select 'IP_address', min( 'date')
from 'log_ip'
group by 'IP_address'

Marche nickel

Le
select * from 'log_ip'
where ('IP_address', 'date')
not in (
select 'IP_address', min('date')
from 'log_ip'
group by 'IP_address'
)

Marche aussi !!

par contre le delete me renvoie une erreur

delete from 'log_ip'
where ('IP_address', 'date')
not in (
select 'IP_address', min('date')
from 'log_ip'
group by 'IP_address'
)

#1093 - You can't specify target table 'log_ip' for update in FROM
clause



Mais en faite j'ai trouvé il faire une table temporaire qui fera passerelle entre le select et le delete ce qui donne :

delete from 'log_ip'
where ('IP_address', 'date')
not in (
select * from (
select 'IP_address', min('date')
from 'log_ip'
group by 'IP_address'
) tmp
)

Si ca peux aider voila merci beaucoup en tout cas
0
merci beaucoup cela m'a beaucoup aidé ^^
0
guillaumeG41 Messages postés 31 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 14 août 2011 2
14 août 2011 à 20:21
De rien, je trouve cela fascinant que de vieux postes puisse toujours aider
0