KPI4b.sql

  1. /**
  2.  * This query will build up the 3 temporary tables,
  3.  * and the runner will then query these tables.
  4.  */
  5.  
  6. -- Create all the temporary tables we need...
  7. CREATE TEMPORARY TABLE IF NOT EXISTS `nacl_crosstab_1` (
  8. `JOB_NO` VARCHAR(20) NOT NULL,
  9. `NACL_DATE` DATE,
  10. PRIMARY KEY (`JOB_NO`)
  11. );
  12.  
  13. CREATE TEMPORARY TABLE IF NOT EXISTS `nacl_crosstab_2` (
  14. `JOB_NO` VARCHAR(20) NOT NULL,
  15. `NACL_DATE` DATE,
  16. PRIMARY KEY (`JOB_NO`)
  17. );
  18.  
  19. CREATE TEMPORARY TABLE IF NOT EXISTS `nacl_crosstab_3` (
  20. `JOB_NO` VARCHAR(20) NOT NULL,
  21. `NACL_DATE` DATE,
  22. PRIMARY KEY (`JOB_NO`)
  23. );
  24.  
  25. -- Ensure they're empty before we insert.
  26. TRUNCATE TABLE `nacl_crosstab_1`;
  27. TRUNCATE TABLE `nacl_crosstab_2`;
  28. TRUNCATE TABLE `nacl_crosstab_3`;
  29.  
  30. -- Insert the data we want into these temp tables.
  31. INSERT INTO `nacl_crosstab_1` (`JOB_NO`, `NACL_DATE`)
  32. SELECT r.JOB_NO, MIN(l.`DATE`)
  33. FROM repairs r
  34. INNER JOIN nacllog l ON (l.`JOB_NO` = r.`JOB_NO`)
  35. WHERE (l.`REASON` = 'C')
  36. OR (l.`REASON` = '')
  37. OR (l.`REASON` IS NULL)
  38. GROUP BY r.`JOB_NO`;
  39.  
  40. INSERT INTO `nacl_crosstab_2` (`JOB_NO`, `NACL_DATE`)
  41. SELECT c.JOB_NO, MIN(l.`DATE`)
  42. FROM nacl_crosstab_1 c
  43. INNER JOIN nacllog l ON (l.`JOB_NO` = c.`JOB_NO`)
  44. AND (l.`DATE` > c.`NACL_DATE`)
  45. WHERE (l.`REASON` = 'C')
  46. OR (l.`REASON` = '')
  47. OR (l.`REASON` IS NULL)
  48. GROUP BY c.`JOB_NO`;
  49.  
  50. INSERT INTO `nacl_crosstab_3` (`JOB_NO`, `NACL_DATE`)
  51. SELECT c.JOB_NO, MIN(l.`DATE`)
  52. FROM nacl_crosstab_2 c
  53. INNER JOIN nacllog l ON (l.`JOB_NO` = c.`JOB_NO`)
  54. AND (l.`DATE` > c.`NACL_DATE`)
  55. WHERE (l.`REASON` = 'C')
  56. OR (l.`REASON` = '')
  57. OR (l.`REASON` IS NULL)
  58. c.`JOB_NO`;
  59.  
  60. -- Finally, get the results in a usable format.
  61. r.`HOUSE_KEY`,
  62. TRIM(h.`HOUSENO`) AS `HOUSENO`,
  63. h.`ROAD`,
  64. h.`DISTRICT`,
  65. h.`POSTCODE`,
  66. r.`JOB_NO`,
  67. n1.`NACL_DATE` AS `NACL_1`,
  68. n2.`NACL_DATE` AS `NACL_2`,
  69. n3.`NACL_DATE` AS `NACL_3`
  70. repairs r
  71. house h ON (h.`HOUSE_KEY` = r.`HOUSE_KEY`)
  72. `nacl_crosstab_1` n1 ON (n1.`JOB_NO` = r.`JOB_NO`)
  73. `nacl_crosstab_2` n2 ON (n2.`JOB_NO` = r.`JOB_NO`)
  74. `nacl_crosstab_3` n3 ON (n3.`JOB_NO` = r.`JOB_NO`);
  75. (r.COMP_DATE BETWEEN [startdate] AND [stopdate])
  76. AND (r.`CALL_TYPE` = [calltype])
  77.