我的数据库有一个日历表,根据日期提供会计年度,期间等(使用带有SQLAssistant的Teradata)。我试图在SQL查询中获取去年的数据,我认为这就像在where子句中添加-1一样简单,但它不起作用。我不想硬编码日期,因为我不想记得在会计年度变化时更新查询。
简化的查询,可以运行并带回所有会计年度的销售数据:
Select s.sales, c.fiscalPeriod, c.fiscalYear
from sales s
join calendar c
on s.salesDate = c.calDate
我尝试了什么,但它没有带回任何数据:
Select s.sales, c.fiscalPeriod, c.fiscalYear
from sales s
join calendar c
on s.salesDate = c.calDate
where c.fiscalYear=c.fiscalYear-1
而且:
Select s.sales, c.fiscalPeriod, c.fiscalYear, c.fiscalYear-1 AS lastYear
from sales s
join calendar c
on s.salesDate = c.calDate
where c.fiscalYear=lastYear
可能很明显,我对SQL很新。任何帮助将不胜感激。
答案 0 :(得分:0)
如果您只想获得去年的财政数据,那么最好的方法可能是将fiscalyear设置为where子句中的常量。
例如:
to_char(fiscalYear,'yyyy')='2015'
有许多日期改变功能,搜索它们,它们很方便。
答案 1 :(得分:0)
如果您的财政年度从3月开始减去两个月,然后使用TRUNC
查找当年1月1日:
trunc(add_months(calendar_date,-2), 'y')
然后应用add_months
:
Select s.sales, c.fiscalPeriod, c.fiscalYear
from sales s
join calendar c
on s.salesDate = c.calDate
where c.calDate between add_months(trunc(add_months(current_date,-2), 'y'), -10)
and add_months(trunc(add_months(current_date,-2), 'y'), 2)-1
答案 2 :(得分:0)
我希望我没有误解您的问题,但是,如果日历表填写到当前日期,您可以使用此查询。
Select s.sales, c_lastyear.fiscalPeriod, c_lastyear.fiscalYear
from sales s
join calendar c_lastyear
on s.salesDate = c_lastyear.calDate
join calendar c
on c_lastyear.fiscalYear=c.fiscalYear-1
where c.calDate= current_date
步骤如下:
通过访问日历表来查找当前会计年度 当前日期(别名 c )
获取上一个会计年度的所有日期(别名 的 c_lastyear 强>)
获取上一会计年度的所有销售额(别名 s )
(表现不如其他提案好,但此查询并未对您的会计年度的实际定义做出假设)