q20.sql 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. -- TPC-H/TPC-R Potential Part Promotion Query (Q20)
  2. -- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0)
  3. -- using 1680793381 as a seed to the RNG
  4. $border = Date("1993-01-01");
  5. $threshold = (
  6. select
  7. 0.5 * sum(l_quantity) as threshold,
  8. l_partkey as l_partkey,
  9. l_suppkey as l_suppkey
  10. from
  11. plato.lineitem
  12. where
  13. cast(l_shipdate as timestamp) >= $border
  14. and cast(l_shipdate as timestamp) < ($border + Interval("P365D"))
  15. group by
  16. l_partkey, l_suppkey
  17. );
  18. $parts = (
  19. select
  20. p_partkey
  21. from
  22. plato.part
  23. where
  24. StartsWith(p_name, 'maroon')
  25. );
  26. $join1 = (
  27. select
  28. ps.ps_suppkey as ps_suppkey,
  29. ps.ps_availqty as ps_availqty,
  30. ps.ps_partkey as ps_partkey
  31. from
  32. plato.partsupp as ps
  33. join any
  34. $parts as p
  35. on
  36. ps.ps_partkey = p.p_partkey
  37. );
  38. $join2 = (
  39. select
  40. distinct(j.ps_suppkey) as ps_suppkey
  41. from
  42. $join1 as j
  43. join any
  44. $threshold as t
  45. on
  46. j.ps_partkey = t.l_partkey and j.ps_suppkey = t.l_suppkey
  47. where
  48. j.ps_availqty > t.threshold
  49. );
  50. $join3 = (
  51. select
  52. j.ps_suppkey as ps_suppkey,
  53. s.s_name as s_name,
  54. s.s_address as s_address,
  55. s.s_nationkey as s_nationkey
  56. from
  57. $join2 as j
  58. join any
  59. plato.supplier as s
  60. on
  61. j.ps_suppkey = s.s_suppkey
  62. );
  63. select
  64. j.s_name as s_name,
  65. j.s_address as s_address
  66. from
  67. $join3 as j
  68. join
  69. plato.nation as n
  70. on
  71. j.s_nationkey = n.n_nationkey
  72. where
  73. n.n_name = 'VIETNAM'
  74. order by
  75. s_name;