Comment faire fonctionner une requête imbriquée dans un where
Résolu/Fermé
Matarela
Messages postés
9
Date d'inscription
lundi 30 septembre 2013
Statut
Membre
Dernière intervention
29 janvier 2014
-
Modifié par Matarela le 14/10/2013 à 12:26
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 15 oct. 2013 à 11:26
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 15 oct. 2013 à 11:26
A voir également:
- Comment faire fonctionner une requête imbriquée dans un where
- Comment faire fonctionner chromecast - Guide
- Liste imbriquée excel - Guide
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- Il y a eu un problème avec cette requête. nous travaillons à sa résolution aussi vite que nous le pouvons. - Forum Facebook
2 réponses
Utilisateur anonyme
Modifié par nagashima le 15/10/2013 à 09:29
Modifié par nagashima le 15/10/2013 à 09:29
salut,
je ne vais pas reprendre ta requête car elle me semble bien compliquée pour ce que tu souhaite. Cependant, sache qu'une table non temporaire peu être déclarée plusieurs fois dans une requête. (je ne vais l'utiliser qu'une fois, mais ca peu être utile à savoir tout de même)
Donc dans un premier temps, on va éliminer de tes résultats ce qui ne nous interesse pas. T1 sera donc déclaré de cette manière :
ce qui retournera :
doncil te suffit de rajouter
pour avoir les résultats que tu attends
naga
je ne vais pas reprendre ta requête car elle me semble bien compliquée pour ce que tu souhaite. Cependant, sache qu'une table non temporaire peu être déclarée plusieurs fois dans une requête. (je ne vais l'utiliser qu'une fois, mais ca peu être utile à savoir tout de même)
Donc dans un premier temps, on va éliminer de tes résultats ce qui ne nous interesse pas. T1 sera donc déclaré de cette manière :
(
select community ,
max(n_day) as n_days
FROM
(
select CONCAT(SUBSTR(cp,8,8),SUBSTRING_INDEX(SUBSTRING_INDEX(cp, '/', -2), '/', 1)) as community, DATEDIFF(now(), last_at) as n_day
FROM box
)
) as T1
ce qui retournera :
----------------------------
| community | n_days |
----------------------------
| lssu/gama | 255 |
| lssu/emau | 102 |
| lssu/mou | 190 |
----------------------------
doncil te suffit de rajouter
where n_days < 180;
pour avoir les résultats que tu attends
naga
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
15 oct. 2013 à 11:26
15 oct. 2013 à 11:26
Autre solution : tu peux aussi mettre ton WHERE à l'intérieur de ta première sous-requête, ce qui en plus enlève un niveau de sous-requête et cimplifie le tout :
Xavier
PS : on peut encore enlever un niveau de sous-requête, mais je ne suis pas sûr que ça rende plus lisible :
SELECT t1.community, t1.n_days
FROM (
select
CONCAT(SUBSTR(cp, 8, 8), SUBSTRING_INDEX(SUBSTRING_INDEX(cp, '/', -2), '/', 1)) as community,
DATEDIFF(now(), last_at) as n_days
FROM box
WHERE DATEDIFF(now(), last_at) >= 180
) t1
inner join community on t1.community = community.community;
Xavier
PS : on peut encore enlever un niveau de sous-requête, mais je ne suis pas sûr que ça rende plus lisible :
SELECT com.community, DATEDIFF(now(), box.last_at) as n_days
FROM box
INNER JOIN community com
ON CONCAT(SUBSTR(box.cp, 8, 8), SUBSTRING_INDEX(SUBSTRING_INDEX(box.cp, '/', -2), '/', 1)) = com.community
WHERE DATEDIFF(now(), box.last_at) >= 180