Lorsque je récupère des données à l'aide de Select date,type,value from table1
Il affiche les valeurs comme ci-dessous.
Mais je veux le personnaliser comme suit
Quelqu'un peut-il me donner une idée pour y parvenir ?
Tout d'abord, nous marquons chaque fois qu'il y a un changement dans les Value
en utilisant lag
et en ordonnant par Date
et ensuite nous count
pour créer des groupes distincts.
select min(date) as "From Date"
,max(date) as "To Date"
,type
,value
from (
select *
,count(chng) over(order by date) as grp
from (
select *
,case when value <> lag(value) over(order by date) then 1 end as chng
from t
) t
) t
group by grp, type, value
order by 1
Date de début
A ce jour
type
valeur
2022-09-21
2022-09-24
S
10
2022-09-25
2022-09-27
S
12
2022-09-28
2022-09-30
S
10
Ceci peut être réalisé par MATCH_RECOGNIZE, je ne suis pas sûr que tous les mots-clés soient supportés dans postgres mais cela fonctionne parfaitement dans oracle.
with tbl as (
select '2022-09-21' as "Date", 'S' as "Type", '10' as "Value" from dual union all
select '2022-09-22', 'S', '10' from dual union all
select '2022-09-23', 'S', '10' from dual union all
select '2022-09-24', 'S', '10' from dual union all
select '2022-09-25', 'S', '12' from dual union all
select '2022-09-26', 'S', '12' from dual union all
select '2022-09-27', 'S', '12' from dual union all
select '2022-09-28', 'S', '10' from dual union all
select '2022-09-29', 'S', '10' from dual union all
select '2022-09-30', 'S', '10' from dual)
select
*
from tbl
MATCH_RECOGNIZE (
order by "Date"
measures
first(chg1."Date") as "From Date",
First(chg2."Date") as "To Date",
chg1."Type" as "Type",
chg1."Value" as "Value"
one row per match
pattern(chg1 chg3+ chg2)
define
chg1 as "Value" <> PREV("Value") or (NVL(PREV("Value"),-1) = -1),
chg2 as "Value" <> NEXT("Value") or (NVL(NEXT("Value"),-1) = -1),
chg3 as NOT (("Value" <> PREV("Value") or (NVL(PREV("Value"),-1) = -1))
OR ("Value" <> NEXT("Value") or (NVL(NEXT("Value"),-1) = -1)))
);
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.