【发布时间】:2022-02-12 23:41:03
【问题描述】:
我的表格包括两列:日历周和年。 如果我想按日历周和年份获取最新条目,我目前执行:
SELECT * FROM table WHERE calyear = (SELECT MAX(calyear) FROM table) AND calweek = (SELECT MAX(calweek) FROM table WHERE calyear = (SELECT MAX(calyear) FROM table))
这是超长的。我想用周和年的组合来替换它,例如'calweek-calyear' 列。是否有日期格式或者我应该将其保存为小文本? 我希望能够对其执行 MAX() 并且性能不应该受到严重影响。 我愿意寻求更好的解决方案,谢谢。
【问题讨论】:
-
请提供几行样本数据和预期结果。
-
您使用的是 MySQL 还是 SqlLite?您可以创建一个组合它们的整数,例如
SELECT * FROM table WHERE (CalYear * 100) + CalWeek = (SELECT MAX((CalYear * 100) + CalWeek) FROM table);。但是,如果您使用的是更高版本的 MySQL,那么使用RANK()来识别最大行数可能会更好,但是如果您甚至使用 MySQL,则从标签中不清楚,更不用说更高版本了 - @987654321 @ -
@GarethD 我使用 Mysql(更正标签)。感谢您的评论/回答。
-
请显示
EXPLAIN PLAN ...的输出(带有您的查询的点。索引可能丢失。另外,查询当前周时您只需要一列(如果该列具有date类型,例如:select d from dates where weekofyear(d)=6 and year(d)=2022;将获得当前周。 -
你对周的定义是什么? ISO 8601 standard 定义?其他定义?