使用日历表SQL查找去年的会计年度数据

时间:2016-09-12 08:19:47

标签: sql teradata

我的数据库有一个日历表,根据日期提供会计年度,期间等(使用带有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很新。任何帮助将不胜感激。

3 个答案:

答案 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

步骤如下:

  1. 通过访问日历表来查找当前会计年度 当前日期(别名 c

  2. 获取上一个会计年度的所有日期(别名 的 c_lastyear

  3. 获取上一会计年度的所有销售额(别名 s

  4. (表现不如其他提案好,但此查询并未对您的会计年度的实际定义做出假设)