我最近听到了这样的建议:“如果您使用的是 DISTINCT,我会挑战您修复您的代码。” 但是,我想知道这个建议背后的考虑因素,以及这是否意味着我应该以不同的方式处理以下问题。
问题背景
我有一个非规范化的日期维度表(Kimball 星型架构)。在这张表中,我折叠了几个第三范式表:日期、绝对周、绝对月和年。对于这些折叠表中的每一个,我都有一个表示唯一标识的列、一个文本名称列和一个数字手动排序索引。这是显示结构的示例行,数字仅用于说明(为便于阅读采用垂直形式):
为了便于理解,我选择使用日期维度表,但该问题可以转换为任何其他涉及层次结构的维度表。
问题概要
我想用相关的文本字段检索一组不同的周和月组合。
可能的解决方案
1. 与众不同
SELECT DISTINCT MonthId, WeekId, YearName, MonthName, WeekName
FROM DimDate
Run Code Online (Sandbox Code Playgroud)
请注意,我不能排除 MonthId 或 WeekId,因为我不能假设自由文本字段是唯一的。
2. 分组依据
SELECT MIN(YearName), MIN(MonthName), MIN(WeekName)
FROM DimDate
GROUP BY MonthId, WeekId
Run Code Online (Sandbox Code Playgroud)
3. 行号
WITH grp AS (
SELECT …Run Code Online (Sandbox Code Playgroud)