Page 1 sur 2

boucle sur un resultat sql

Posté : 13 nov. 2022, 16:18
par sidaliloo
salam,
j'ai un resultat d'une requete mysql qui contient une liste des dates:
resultat:
2022-01-01
2022-01-02
2022-01-03
2022-01-04
Je veux faire une requet sql sur cet resultat qui recule en quatre jour avant chaque date de resultat:
voila le resulat qui je veux:
2022-12-28
2022-12-29
2022-12-30
2022-12-31
2022-01-01
2022-12-29
2022-12-30
2022-12-31
2022-12-01
2022-01-02
2022-12-30
2022-12-31
2022-12-01
2022-12-02
2022-01-03
2022-12-31
2022-12-01
2022-12-02
2022-12-03
2022-01-04
merci beaucoup d'avance.

Re: boucle sur un resultat sql

Posté : 14 nov. 2022, 09:47
par Spols
tu sais que 4 avant le 01/01/2022 c'est le 28/12/2021 et pas 28/12/2022 ??
gère cela en php lors du parcours de ton résultat
ou utilise le mot clé sql INTERVAL
'champsDate' - INTERVAL 1 DAY

Re: boucle sur un resultat sql

Posté : 14 nov. 2022, 11:00
par sidaliloo
salam et merci pour votre reponse et votre aide
c'est vrai j'ai trampé de mettre l'année 2022.
le probleme c que je dois faire le resultat uniquement par la requete mysql car on a un outils qui s'appele dremio qui est specialement les requetes.
merci d'avance.

salam,
j'ai un resultat d'une requete mysql qui contient une liste des dates:
resultat:
2022-01-01
2022-01-02
2022-01-03
2022-01-04
Je veux faire une requet sql sur cet resultat qui recule en quatre jour avant chaque date de resultat:
voila le resulat qui je veux:
2021-12-28
2021-12-29
2021-12-30
2021-12-31
2022-01-01
2021-12-29
2021-12-30
2021-12-31
2022-01-01
2022-01-02
2021-12-30
2021-12-31
2022-01-01
2022-01-02
2022-01-03
2021-12-31
2022-01-01
2022-01-02
2022-01-03
2022-01-04

Re: boucle sur un resultat sql

Posté : 14 nov. 2022, 12:15
par Spols
donne nous ta requète SQL et la structure de ta table
OU
cherche en utilisant INTERVAL

Re: boucle sur un resultat sql

Posté : 14 nov. 2022, 12:59
par sidaliloo
voila la requete a essayer:
select "date",date_sub(T."date",5) from
(
select
"date" FROM matable where "date" between TO_DATE(CONCAT(TO_CHAR(now(), 'YYYY-MM-'),'01'),'YYYY-MM-DD') and last_day(curdate())
group by "date" ORDER BY "date" ASC
) as T order by T."date";

sachant que matable contient des dates par exe:
matable:
date
2022-01-01
2022-01-03
2022-01-04
2022-01-06
2022-01-10

Re: boucle sur un resultat sql

Posté : 14 nov. 2022, 13:25
par Spols
SELECT u.Date FROM( SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 4 DAY as Date, `unique` FROM `table` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 3 DAY as Date, `unique` FROM `table` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 2 DAY as Date, `unique` FROM `table` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 1 DAY as Date, `unique` FROM `table` t1 UNION SELECT t1.`date` AS Date, `unique` FROM `table` t1) u ORDER BY unique, Date;
me semble prométteur mais il faut un champs unique à chaque ligne ou complexifier encore un peu pour utiliser ROW_NUMBER()

Re: boucle sur un resultat sql

Posté : 14 nov. 2022, 16:52
par sidaliloo
je te remercie beaucoup pour ton aide,mais
le cas ou j'ai 30jours il faut faire une boucle sur l'union?:
exe:
table:
date
2022-01-01
2022-01-02
2022-01-03
2022-01-04
.
.
.
.
2022-01-31
merci d'avance

Re: boucle sur un resultat sql

Posté : 14 nov. 2022, 17:04
par Spols
le nombre d'union dépend du nombre de jours de recul que tu veux. si tu veux 30 jours il faudra 29 UNION je connais pas de moyen de faire des boucle en sql (mais si c'est un script php qui génère la requète une boucle est possible)

Re: boucle sur un resultat sql

Posté : 15 nov. 2022, 13:35
par sidaliloo
salam je pense que tu n'as pas bien compris.
j'ai une table qui contient des dates de 30jours:
je veux reculer pour chaque date par 4jours
exemple:
table
date
2021-12-28
2021-12-29
2021-12-30
2021-12-31
2022-01-01
2021-12-29
2021-12-30
2021-12-31
2022-01-01
2022-01-02
2021-12-30
2021-12-31
2022-01-01
2022-01-02
2022-01-03
2021-12-31
2022-01-01
2022-01-02
2022-01-03
2022-01-04
.
.
.
.
2022-01-27
2022-01-28
2022-01-29
2022-01-30
2022-01-31
merci d'avance.

Re: boucle sur un resultat sql

Posté : 16 nov. 2022, 11:43
par sidaliloo
salam,
si tu as trouvé une solution merci de m'informer.
cordialement.
Ton frère ALI

Re: boucle sur un resultat sql

Posté : 16 nov. 2022, 11:50
par Spols
essaye d'adapter la solution que je t'ai donné, je n'ai pas mieux.

Re: boucle sur un resultat sql

Posté : 16 nov. 2022, 15:56
par sidaliloo
salam,
j'ai essayer d'avoir les dates de mois avec la premiere date de recule en 4jour:
select @s:=@s+1 as id,date,STR_TO_DATE(date, "%Y-%m-%d")- INTERVAL 4 DAY as date_4j from (
SELECT DATE_FORMAT(DATE_SUB(last_day(curdate()), INTERVAL xc-1 day), '%Y-%m-%d') as date
FROM (
SELECT @xi:=@xi+1 as xc from
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) xc1,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) xc2,
(SELECT @xi:=0) xc0
) xcxc) x0,(SELECT @s:=0)as s where x0.date >= (select date_add(curdate(),interval-day(curdate())+1 day)) ORDER by date
résultat1:
|1|2022-11-01|2022-10-28
|2|2022-11-02|2022-10-29
|3|2022-11-03|2022-10-30
|4|2022-11-04|2022-10-31
|5|2022-11-05|2022-11-01
|6|2022-11-06|2022-11-02
|7|2022-11-07|2022-11-03
|8|2022-11-08|2022-11-04
|9|2022-11-09|2022-11-05
|10|2022-11-10|2022-11-06
|11|2022-11-11|2022-11-07
|12|2022-11-12|2022-11-08
|13|2022-11-13|2022-11-09
|14|2022-11-14|2022-11-10
|15|2022-11-15|2022-11-11
|16|2022-11-16|2022-11-12
|17|2022-11-17|2022-11-13
|18|2022-11-18|2022-11-14
|19|2022-11-19|2022-11-15
|20|2022-11-20|2022-11-16
|21|2022-11-21|2022-11-17
|22|2022-11-22|2022-11-18
|23|2022-11-23|2022-11-19
|24|2022-11-24|2022-11-20
|25|2022-11-25|2022-11-21
|26|2022-11-26|2022-11-22
|27|2022-11-27|2022-11-23
|28|2022-11-28|2022-11-24
|29|2022-11-29|2022-11-25
|30|2022-11-30|2022-11-26
j'ai une autre table qui contient de suit:
table2
id, date, nb
|7|2022-10-28|3
|8|2022-10-29|3
|9|2022-10-30|6
|10|2022-10-31|7
|1|2022-11-01|1
|2|2022-11-02|11
|3|2022-11-03|2
|4|2022-11-04|333
|5|2022-11-05|22
|6|2022-11-06|22
.
.
.
|26 |2022-10-26| 33
| 27|2022-10-27 |34
|28 |2022-10-28| 36
|29 |2022-10-30| 39
| 30|2022-11-01 |40

est ce qu'on peut boucler la table "table2" sur "resultat1" pour avoir ce résultat qui suit:
2022-10-28 3
2022-10-29 3
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-10-29 3
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-11-03 2
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-11-03 2
2022-11-04 333
.
.
.
2022-11-26 33
2022-11-27 34
2022-11-28 36
2022-11-29 39
2022-11-30 31
c'est ca que je veux exactement uniquement par requête mysql
MERCI POUR TON AIDE

Re: boucle sur un resultat sql

Posté : 16 nov. 2022, 16:21
par Spols
si j'adapte mon code à ta structure
SELECT u.Date FROM( SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 4 DAY as Date, `id` FROM `table2` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 3 DAY as Date, `id` FROM `table2` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 2 DAY as Date, `id` FROM `table2` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 1 DAY as Date, `id` FROM `table2` t1 UNION SELECT t1.`date` AS Date, `id` FROM `table2` t1) u ORDER BY id, Date;

Code : Tout sélectionner

SVP utilise des balise [code ] ou [sql ] pour la compréhension

Re: boucle sur un resultat sql

Posté : 16 nov. 2022, 16:24
par Spols
Ce que tu veux reste très opaque pour moi. donc je sais pas comment t'aider plus.

ta table 2 contient des doublons ou tu t'es trompé en la recopiant ?

Re: boucle sur un resultat sql

Posté : 16 nov. 2022, 16:48
par sidaliloo
la table2 contient des dates avec le nb entre le 2022-01-01 et 2022-01-31.
et je veux faire le recule par 4jours sur chaque date de la table2 afin d'avoir ce résultat:
2022-10-28 3
2022-10-29 3
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-10-29 3
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-11-03 2
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-11-03 2
2022-11-04 333
.
.
.
2022-11-26 33
2022-11-27 34
2022-11-28 36
2022-11-29 39
2022-11-30 31