Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. DROP DATABASE IF EXISTS school;
  2. CREATE DATABASE school CHARSET 'utf8';
  3. USE school;
  4.  
  5. CREATE TABLE Students(
  6. Id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  7. Name VARCHAR(150) NOT NULL,
  8. Num INTEGER NOT NULL,
  9. ClassNum INTEGER NOT NULL,
  10. ClassLetter CHAR(1) NOT NULL,
  11. Birthday DATE,
  12. EGN CHAR(10),
  13. EntranceExamResult NUMERIC(3,2)
  14. );
  15.  
  16. CREATE TABLE StudentsHistory (
  17. StudentId INTEGER,
  18. Name VARCHAR(150) NOT NULL,
  19. Num INTEGER NOT NULL,
  20. ClassNum INTEGER NOT NULL,
  21. ClassLetter CHAR(1) NOT NULL,
  22. Birthday DATE,
  23. EGN CHAR(10),
  24. EntranceExamResult NUMERIC(3,2),
  25. Id INTEGER NOT NULL PRIMARY KEY,
  26. TypeOfChange CHAR NOT NULL,
  27. TimeOfChange DATETIME NOT NULL
  28. );
  29.  
  30.  
  31. delimiter |
  32.  
  33. CREATE TRIGGER HistoryInsert AFTER INSERT ON Students
  34. FOR EACH ROW
  35. BEGIN
  36. INSERT INTO StudentsHistory(Id, Name, Num, ClassNum, ClassLetter, Birthday, EGN, TypeOfChange, TimeOfChange) VALUES(NEW.Id, NEW.Name, NEW.Num, NEW.ClassNum, NEW.ClassLetter, NEW.Birthday, NEW.EGN, 'I', NOW());
  37. END;
  38. |
  39.  
  40. delimiter ;
  41.  
  42. delimiter |
  43.  
  44. CREATE TRIGGER HistoryUpdate AFTER UPDATE ON Students
  45. FOR EACH ROW
  46. BEGIN
  47. INSERT INTO StudentsHistory(Id, Name, Num, ClassNum, ClassLetter, Birthday, EGN, TypeOfChange, TimeOfChange) VALUES(NEW.Id, NEW.Name, NEW.Num, NEW.ClassNum, NEW.ClassLetter, NEW.Birthday, NEW.EGN, 'U', NOW());
  48. END;
  49. |
  50.  
  51. delimiter ;
  52.  
  53. delimiter |
  54.  
  55. CREATE TRIGGER HistoryDelete AFTER DELETE ON Students
  56. FOR EACH ROW
  57. BEGIN
  58. INSERT INTO StudentsHistory(Id, Name, Num, ClassNum, ClassLetter, Birthday, EGN, TypeOfChange, TimeOfChange) VALUES(OLD.Id, OLD.Name, OLD.Num, OLD.ClassNum, OLD.ClassLetter, OLD.Birthday, OLD.EGN, 'U', NOW());
  59. END;
  60. |
  61.  
  62. delimiter ;
  63.  
  64. INSERT INTO Students(Id, Name, Num, ClassNum, ClassLetter, Birthday, EGN) VALUES( 101, 'Зюмбюл Петров', 10, 11, 'а', '1999-02-28', NULL );
  65. INSERT INTO Students(Name, Num, ClassNum, ClassLetter, Birthday, EGN) VALUES( 'Исидор Иванов', 15, 10, 'б', '2000-02-29', '0042294120' );
  66. INSERT INTO Students(Name, Num, ClassNum, ClassLetter, Birthday, EGN) VALUES( 'Панчо Лалов', 20, 10, 'б', '2000-05-01', NULL );
  67. INSERT INTO Students(Name, Num, ClassNum, ClassLetter, Birthday, EGN) VALUES( 'Петраки Ганьов', 20, 10, 'а', '1999-12-25', '9912256301' );
  68. INSERT INTO Students(Name, Num, ClassNum, ClassLetter, Birthday, EGN) VALUES( 'Александър Момчев', 1, 8, 'а', '2002-06-11', NULL );
  69.  
  70. INSERT INTO Students(Name, Num, ClassNum, ClassLetter, Birthday, EGN) VALUES('Зюмбюл Петров', 10, 11, 'а', '1999-02-28', NULL );
  71. INSERT INTO Students(Name, Num, ClassNum, ClassLetter, Birthday, EGN) VALUES( 'Исидор Иванов', 15, 10, 'б', '2000-02-29', '0042294120' );
  72. INSERT INTO Students(Name, Num, ClassNum, ClassLetter, Birthday, EGN) VALUES( 'Панчо Лалов', 20, 10, 'б', '2000-05-01', NULL );
  73. INSERT INTO Students(Name, Num, ClassNum, ClassLetter, Birthday, EGN) VALUES( 'Петраки Ганьов', 20, 10, 'а', '1999-12-25', '9912256301' );
  74. INSERT INTO Students(Name, Num, ClassNum, ClassLetter, Birthday, EGN) VALUES( 'Александър Момчев', 1, 8, 'а', '2002-06-11', NULL );
  75.  
  76.  
  77. SELECT * FROM StudentsHistory
  78. WHERE StudentsHistory.Name = 'Зюмбюл Петров'
  79. ORDER BY TimeOfChange ASC;
  80.  
  81. SELECT * FROM StudentsHistory
  82. WHERE StudentsHistory.Id = 101
  83. ORDER BY TimeOfChange DESC
  84. LIMIT 1;
  85.  
  86. SELECT hs.Num, hs.Name
  87. FROM StudentsHistory hs
  88. LEFT JOIN StudentsHistory later
  89. ON hs.id = later.id AND
  90. hs.TimeOfChange < later.TimeOfChange
  91. WHERE later.id IS NULL AND
  92. hs.TypeOfChange <> 'D';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement