我对DWH的SQL查询有疑问。我的维度表中有月份和年份列以及我的事实表中的销售价值,我想查找特定年份第三季度的销售额。对此有什么SQL查询?
答案 0 :(得分:0)
SELECT fact.sales_value FROM fact_sales
INNER JOIN dim_month ON (... your join here ...)
WHERE
dim_month.month IN ( 7,8,9 )
AND
dim_month.year = <yourYear>
如果你有更多这样的查询,你可以考虑一个starflake-schema,你有dim_month,dim_quartar,dim_year等,而不是在一个维度表中合并月份和年份。
答案 1 :(得分:0)
如果您的事实表将日期列作为日期维度的外键,则可以按日期直接过滤。
CREATE TABLE Date (
Date DATE PRIMARY KEY,
Year INT,
Quarter INT,
Semestre INT,
FiscalYear INT,
IsEndOfMonth BIT,
--... other metrics
)
CREATE TABLE Fact (
SaleID INT,
--... other metrics
Date DATE,
FOREIGN KEY (Date) REFERENCES Date (Date))
SELECT
*
FROM
Fact F
WHERE
F.Date >= '2018-10-01' AND -- No need to access the Date dimension in this case
F.Date < '2019-01-01'
如果您的维度表具有代理键,并且该事实通过此键链接到您的日期维度,那么唯一可能的过滤器将是加入两者并过滤日期表。
CREATE TABLE Date (
DateID INT PRIMARY KEY, -- Auto-generated number, not related to the actual date information
Date DATE UNIQUE,
Year INT,
Quarter INT,
Semestre INT,
FiscalYear INT,
IsEndOfMonth BIT,
Month INT,
--... other metrics
)
CREATE TABLE Fact (
SaleID INT,
--... other metrics
DateID INT,
FOREIGN KEY (DateID) REFERENCES Date (DateID))
SELECT
*
FROM
Fact F
INNER JOIN Date D ON F.DateID = D.DateID
WHERE
D.Month IN (10, 11, 12) AND
D.Year = 2018
性能时间在很大程度上取决于行数,索引,函数调用和查询复杂性。