1 回答
TA贡献2051条经验 获得超10个赞
您的首要工作应该是修复您的数据模型并使用date类似 - 的数据类型来存储日期信息,而不是将其分散在不同的列中。这应该像向表中添加新列并从现有列更新它一样简单:
alter table test_data add mydate date;
update test_data set mydate = concat(year, '-', month, '-01');
也就是说,要使您当前的查询正常工作,您需要按如下方式微调日期条件。一种选择使用算术:
SELECT a.year, a.month, a.value, a.category
FROM test_data AS a
WHERE (
SELECT COUNT(*)
FROM test_data AS b
WHERE
b.category = a.category
AND 100 * b.year + b.month >= 100 * a.year + a.month
) <= 2
ORDER BY a.year DESC, a.month DESC
或者,如果您运行的是 MySQL 8.0,则可以使用row_number():
SELECT a.year, a.month, a.value, a.category
FROM (
SELECT
a.*,
ROW_NUMBER() OVER(PARTITION BY a.category ORDER BY a.year DESC, a.month DESC)
FROM test_data AS a
) a
WHERE rn <= 2
- 1 回答
- 0 关注
- 85 浏览
添加回答
举报