boucle sur un resultat sql

Eléphanteau du PHP | 11 Messages

13 nov. 2022, 16:18

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.

Mammouth du PHP | 1967 Messages

14 nov. 2022, 09:47

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

14 nov. 2022, 11:00

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

Mammouth du PHP | 1967 Messages

14 nov. 2022, 12:15

donne nous ta requète SQL et la structure de ta table
OU
cherche en utilisant INTERVAL
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

14 nov. 2022, 12:59

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

Mammouth du PHP | 1967 Messages

14 nov. 2022, 13:25

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()
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

14 nov. 2022, 16:52

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

Mammouth du PHP | 1967 Messages

14 nov. 2022, 17:04

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)
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

15 nov. 2022, 13:35

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.

Eléphanteau du PHP | 11 Messages

16 nov. 2022, 11:43

salam,
si tu as trouvé une solution merci de m'informer.
cordialement.
Ton frère ALI

Mammouth du PHP | 1967 Messages

16 nov. 2022, 11:50

essaye d'adapter la solution que je t'ai donné, je n'ai pas mieux.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

16 nov. 2022, 15:56

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

Mammouth du PHP | 1967 Messages

16 nov. 2022, 16:21

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 1967 Messages

16 nov. 2022, 16:24

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 ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

16 nov. 2022, 16:48

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