Select max, group by et having
Bonjour a tous,
j'essaie d'effectuer une requête mais je bloque sur un détail. Je veux sélectionner le "peak_cps max" s’il y a sinon le "cps_max maximum"….Dans le cas du "peak_cps", je dois aussi inclure le "peak_depth" et dans le cas du "cps_max", je dois inclure le "dep_f" et le "dep_t" !!!
Comment puis-je m’y prendre?
exemple de données:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
id | NUMBER | Dep_F | Dep_T |cps_max|cps_min|peak_cps|peak_depth
1871 88-08-053 20.7 80 120 100
1872 88-08-053 80 280 110 90
1873 88-08-053 280 454 120 100
1874 88-08-053 454 575.5 130 110
1875 88-08-053 575.5 576.5 130 110 140 576
1876 88-08-053 576.5 578.4 330 130 410 577
1877 88-08-053 578.4 581.3 140 110 220 580.8
1878 88-08-053 581.3 581.9 525 420 570 581.5
1879 88-08-053 581.9 582.2 2770 1400 4875 582
1880 88-08-053 582.2 582.4 23300 8000
1881 88-08-053 582.4 583.6 65000 65000
1882 88-08-053 583.6 583.8 25600 22200
1883 88-08-053 583.8 584.3 7000 1470 9900 584.1
1884 88-08-053 584.3 585.6 450 110 2500 584.5 |
et le résutalt souhaité:
Code:
1 2 3
|
id | NUMBER |cps_max|peak_depth|Dep_F| Dep_T
1881 88-08-053 65000 582.4 583.6 |
Voici ce que j'ai essayé qui se rapproche le plus de ce que je veux mais j'ai quelques aberrations
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
select
udef.number,
max(udef.peak_cps) as "Peak_CPS",
max(radiometrie1.peak_depth) as "Peak_Depth",
null as "dep_f",
null as "dep_t"
from
udef
join udef as radiometrie1 on udef.radiometrie_id = radiometrie1.radiometrie_id
where
udef.peak_cps is not null and udef.peak_cps <> 0
group by
udef.number
union
select
udef.number,
max(udef.cps_max) as "Peak_CPS",
null as "Peak_Depth",
max(radiometrie1.dep_f) as "dep_f",
max(radiometrie1.dep_t) as "dep_t"
from
udef
join udef as radiometrie1 on udef.radiometrie_id = radiometrie1.radiometrie_id
group by
udef.number
--having max(udef.peak_cps) is null or max(udef.peak_cps) = 0 |
Merci !!