对此问题予以启发这一个(闭合)和几乎是相同的这一个,但使用不同的RDBMS(PostgreSQL的对比的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年的第1个月中,出现平局-因此,随机选择一个并给出答案是没有意义的 -因此必须包括平局-这使问题更具挑战性。
正确答案是:
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小提琴就在这里!
我知道这是一个SQL特定的问题,但是可以通过使用时间序列数据库来简化此过程。
—
腰带
@Sash,可以使用大多数SQL DBMS(包括较新版本的MySQL / MariaDB)简化得多。MySQL 5.6没有实现SQL92之后发明的许多功能。
—
Lennart