percentile_interval.sql 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. /* syntax version 1 */
  2. $zero = unwrap( cast(0 as Interval) );
  3. $one = unwrap( cast (1 as Interval ) );
  4. -- we want to check both optional<interval> and plain interval
  5. $prepared = select
  6. cast (key As Interval) ?? $zero as interval_data
  7. from plato.Input;
  8. $source = select
  9. interval_data
  10. , interval_data + $one as interval_data2
  11. , just( interval_data ) as optional_interval_data
  12. from $prepared;
  13. -- percentile factory can work with plain number and with tuple of numbers.
  14. -- to achive second call we must make several percentile invocations with
  15. -- same column name
  16. $data_plain = select
  17. percentile(interval_data, 0.8) as result
  18. from $source;
  19. -- optimization should unite this into one call to percentile with tuple as argument
  20. $data_tuple = select
  21. percentile(interval_data2, 0.8) as result_1
  22. , percentile(interval_data2, 0.6) as result_2
  23. from $source;
  24. $data_optional = select
  25. percentile(optional_interval_data, 0.4) as result
  26. from $source;
  27. select EnsureType(result, Interval?) from $data_plain;
  28. select EnsureType(result_1, Interval?) from $data_tuple;
  29. select EnsureType(result_2, Interval?) from $data_tuple;
  30. select result from $data_optional;