Це питання було натхненний цей [закритий] і практично ідентичний цього одному , але з використанням різних СУБД ( в PostgreSQL vs. MySQL).
Припустимо, у мене є список новоутворень (ці дані моделюються з реальних даних):
CREATE table illness (nature_of_illness VARCHAR(25), created_at DATETIME);
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Lung', '2018-01-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2018-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2018-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2018-02-03 17:50:32');
INSERT INTO illness VALUES ('Cervix', '2018-02-03 17:50:32');
-- 2017, with 1 Cervix and Lung each for the month of Jan - tie!
INSERT INTO illness VALUES ('Cervix', '2017-01-03 15:45:40');
INSERT INTO illness VALUES ('Lung', '2017-01-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2017-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2017-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2017-02-03 17:50:32');
INSERT INTO illness VALUES ('Cervix', '2017-02-03 17:50:32');
Ви хочете дізнатися, яка конкретна пухлина була найбільш часто зустрічається в даному місяці - поки що добре!
Тепер ви помітите, що для першого місяця 2017 року існує розв'язка - тому немає сенсу вибирати випадковий вибір і давати це як відповідь - тому зв'язки повинні бути включені - це робить проблему набагато складнішою.
Правильна відповідь:
Year Month Tumour count Type
2017 1 1 Cervix -- note tie
2017 1 1 Lung -- " "
2017 2 3 Lung
2018 1 5 Cervix
2018 2 3 Lung
Наступним бонусом буде те, щоб назва місяця відображалася як текст, а не ціле число.
У мене є рішення, але воно досить складне - я хотів би знати, чи моє рішення оптимальне чи ні. Загадка MySQL тут !