Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --on newer cdr's use tstzrange instead of tsrange
- --this query can take a long time on systems with a lot of records.
- --needs optimization (esp filtering the date)
- WITH timeslots AS (
- SELECT * FROM (
- SELECT
- direction, tsrange(timepoint, lead(timepoint) OVER (ORDER BY timepoint)),
- lead(timepoint) OVER (ORDER BY timepoint)
- FROM (
- SELECT
- direction, unnest(ARRAY["start_stamp", "end_stamp"]) as timepoint
- FROM
- v_xml_cdr
- WHERE "direction" = 'inbound' AND (CAST("start_stamp" AS text) LIKE '%2021-11%' OR CAST("end_stamp" AS text) LIKE '%2021-11%')
- AND "domain_uuid" = 'PASTE_UUID_HERE' AND ("hangup_cause" != 'NO_ROUTE_DESTINATION' OR "sip_hangup_disposition" != 'send_refuse')
- ORDER BY timepoint
- ) s
- )s WHERE lead IS NOT NULL
- )
- SELECT
- GREATEST(MAX(start_stamp), lower(tsrange)),
- LEAST(MIN("end_stamp"), upper(tsrange)),
- COUNT(xml_cdr_uuid),
- array_agg(xml_cdr_uuid)
- FROM
- timeslots t
- JOIN v_xml_cdr a
- ON (t.tsrange && tsrange(a.start_stamp, a.end_stamp)) AND a.direction='inbound'
- GROUP BY tsrange
- HAVING cardinality(array_agg(xml_cdr_uuid)) > 1
- ORDER BY COUNT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement