Requete SQL (PostgreSQL)

Requete SQL (PostgreSQL) - SQL/NoSQL - Programmation

Marsh Posté le 09-01-2023 à 08:51:33    

J'ai une table qui m'identifie les passages au péage de voitures
immat, date_passage, id_peage, heure
 
J'ai fait une requête qui me renvoie les passages d'une voiture donnée :  
Select immat, date_passage, id_peage, (heure-1), (heure+1) from passages where immat = 'xxxxxxx'
 
J'essaie de concevoir une requête qui me sortent les immats des voitures qui sont passées par le même péage, la même journée dans l'intervalle +- 1


---------------
0 118 999 881 999 119 725 ...... 3 -
Reply

Marsh Posté le 09-01-2023 à 08:51:33   

Reply

Marsh Posté le 10-01-2023 à 16:26:46    

On suppose que l'ID du péage est donné (sinon, si c'est pour n'importe quel ID de péage, tu récupères d'abord la liste des péages et tu lances la requête ci-dessous sur chaque ID de péage) :
 
SELECT immat FROM passages WHERE id_peage = XX AND date_passage = YY AND heure BETWEEN (heure-1) AND (heure+1)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-01-2023 à 17:46:03    

Non la seule chose que je connais c'est l'immat.
Faire en plusieurs requêtes c'est bon. Ce que je voudrais c'est une seule requête. Je donne en paramètre l'immat et la requête me renvoie si une autre voiture passe régulièrement avec celle dont je connais l'immat. Par exemple la liste des voitures avec le nombre de fois où chacune est passée avec celle dont je connais l'immat.


Message édité par Jaxom31 le 10-01-2023 à 17:49:04

---------------
0 118 999 881 999 119 725 ...... 3 -
Reply

Marsh Posté le 10-01-2023 à 17:48:49    

Code :
  1. SELECT   same.*  FROM
  2. peage p
  3. INNER JOIN peage same ON samepid_peage = p.id_peage AND same.heure BETWEEN (p.heure-1) AND (p.heure+1) /* il y aura toujours au moins un resultat : la voiture qui sert de cible*/
  4. WHERE  imat = ?
 

au passage heure-1 et heure +1 ne fonctionnera pas pareil suivnat le SGBD que tu utilises, regarde  dans ton cas quel est la bonne

Message cité 1 fois
Message édité par flo850 le 10-01-2023 à 17:49:47

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

Reply

Marsh Posté le 10-01-2023 à 18:04:04    

flo850 a écrit :

Code :
  1. SELECT   same.*  FROM
  2. peage p
  3. INNER JOIN peage same ON samepid_peage = p.id_peage AND same.heure BETWEEN (p.heure-1) AND (p.heure+1) /* il y aura toujours au moins un resultat : la voiture qui sert de cible*/
  4. WHERE  imat = ?


 
au passage heure-1 et heure +1 ne fonctionnera pas pareil suivnat le SGBD que tu utilises, regarde  dans ton cas quel est la bonne


 
Génial, ça fonctionne !
 
Pour l'heure c'est bon en fait elle est en texte de la forme 9999 donc en passant par un (cast(heure as integer) - 1) j'obtiens bien ma valeur moins une minute.
 
Merci beaucoup !


---------------
0 118 999 881 999 119 725 ...... 3 -
Reply

Marsh Posté le 10-01-2023 à 18:09:03    

Les jointures sont vraiment le truc qui ouvre des portes en sql,  documentes toi dessus, c'est très très puissant


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

Reply

Marsh Posté le 10-01-2023 à 18:11:08    

flo850 a écrit :

Les jointures sont vraiment le truc qui ouvre des portes en sql,  documentes toi dessus, c'est très très puissant


 :jap: J'avoue que sorti du left join j'utilise pas beaucoup.


---------------
0 118 999 881 999 119 725 ...... 3 -
Reply

Sujets relatifs:

Leave a Replay

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