मैं Oracle जो उड़ान के चालक दल के लिए प्रति माह रात भर रहता है की संख्या (यदि हो तो) रिटर्न में कुछ चुने हुए बनाया:समूह 3 महीने से अवधि
CRE_ALPHA CRE_NAME MONTH YEAR NIGHT_STOPS
---------- --------- ------ ----- ------------
AAC Adinda 6 2013 8
AAC Adinda 7 2013 9
AAC Adinda 8 2013 2
AAC Adinda 9 2013 7
AAC Adinda 10 2013 4
CCU Cristiano 6 2013 5
CCU Cristiano 7 2013 6
CCU Cristiano 8 2013 3
CCU Cristiano 9 2013 11
CVA Carine 7 2013 9
CVA Carine 9 2013 10
CVA Carine 10 2013 10
अब, वहाँ 18 रात की एक सीमा पर बंद हो जाता है एक 3 महीने का आधार। इसलिए मैं किसी भी 3 सफल महीनों से समूह करना चाहता हूं जिसमें 18 रात की रुकें हैं। परिणाम कुछ इस तरह होना चाहिए:
CRE_ALPHA CRE_NAME TIMESPAN NIGHT_STOPS
---------- --------- --------------- ------------
AAC Adinda 6/2013-8/2013 19
AAC Adinda 7/2013-9/2013 18
CCU Cristiano 7/2013-9/2013 20
CVA Carine 7/2013-9/2013 19
CVA Carine 8/2013-10/2013 20
नोट अगर वहाँ शून्य रात एक महीने के लिए बंद हो जाता है कर रहे हैं, वहाँ कोई पंक्ति है, लेकिन मैं 0.
साथ एक सहित 3 महीने के लिए एक परिणाम चाहते हैं किक्या कोई मदद कर सकता है?
यह मदद कर सकते हैं, पूर्ण नीचे का चयन करें:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY hh24:mi:ss';
SELECT cre_id, cre_alpha, cre_first_name, cre_last_name, Maand, Jaar, count(*) "Night stops"
FROM
(SELECT cre_id, cre_alpha, cre_first_name, cre_last_name, pos_crb_iata_code, dst, det, dsa, (dst - Prev_end_time) * 1440 stop_over, EXTRACT(MONTH FROM dst) Maand, EXTRACT(YEAR FROM dst) Jaar
FROM
(SELECT cre_id, cre_alpha, cre_first_name, cre_last_name, pos_crb_iata_code, dst, dsa, det, dea, LAG(det) OVER (ORDER BY cre_alpha, dst) Prev_end_time
FROM
(SELECT cre_id, cre_alpha, cre_first_name, cre_last_name, pos_crb_iata_code,
COALESCE(flt_mvt_db, flt_com_dep_blk, pog_std, gco_start, oth_std, rsv_std) as dst,
COALESCE(flt_mvt_ab, flt_com_arr_blk, pog_sta, gco_end, oth_sta, rsv_sta) as det,
COALESCE(flt_apt_iata_code_dep, pog_apt_iata_code_from, gco_apt_iata_code, rsv_apt_iata_code) as dsa,
COALESCE(flt_apt_iata_code_arr, pog_apt_iata_code_to, gco_apt_iata_code, rsv_apt_iata_code) as dea
FROM
(SELECT DISTINCT cre_id, cre_alpha, cre_first_name, cre_last_name, pos_crb_iata_code
FROM master.crews, master.assignments, master.positions
WHERE asg_pos_id = pos_id AND asg_cre_id = cre_id AND asg_d_type <> 'LEA'
AND asg_start_time BETWEEN '01-JUN-2013' AND '01-NOV-2013'
ORDER BY cre_alpha) tab1, master.assignments
FULL OUTER JOIN master.flights ON master.assignments.asg_flt_id = master.flights.flt_id
FULL OUTER JOIN master.positionings ON master.assignments.asg_pog_id = master.positionings.pog_id
FULL OUTER JOIN master.ground_courses ON master.assignments.asg_gco_id = master.ground_courses.gco_id
FULL OUTER JOIN master.other_duties ON master.assignments.asg_oth_id = master.other_duties.oth_id
FULL OUTER JOIN master.reserves ON master.assignments.asg_rsv_id = master.reserves.rsv_id
WHERE asg_d_type <> 'LEA' AND asg_d_type <> 'STP' AND asg_cre_id = tab1.cre_id
AND asg_start_time BETWEEN '01-JUN-2013' AND '02-NOV-2013' AND asg_actif = 'Y'
ORDER BY cre_alpha, asg_start_time)
)
WHERE pos_crb_iata_code <> dsa
AND EXTRACT(DAY FROM dst) - EXTRACT(DAY FROM Prev_end_time) >= 1)
WHERE stop_over > 240
GROUP BY cre_id, cre_alpha, cre_first_name, cre_last_name, Maand, Jaar
ORDER BY cre_alpha;
'वर्ष * 12 + महीने' द्वारा ऑर्डरिंग 'महीने' के आदेश से अलग कैसे है? 'सुनिश्चित करें कि एक तीन महीने की खिड़की ली जाती है और न केवल तीन पंक्तियां' कैसे आती हैं? –
यदि सभी पंक्तियां उसी वर्ष से हैं, तो आप 'वर्ष * 12 + महीने' के बजाय केवल 'माह' का उपयोग कर सकते हैं। लेकिन अगर वे अलग-अलग वर्षों से हैं, तो यह महत्वपूर्ण है कि उदा। दिसंबर 2012 और जनवरी 2013 को निरंतर संख्या सौंपा गया है ताकि आप विंडोिंग क्लॉज को सही तरीके से लागू कर सकें। – Codo
आह! फिर यह समझ में आता है। –