如何在Teradata中使用递归日期?

时间:2014-08-15 20:28:58

标签: teradata

我为跑马拉松的人提供了下表

person  start       end
mike    2-Jun-14    2-Jul-14
nike    3-Jul-14    9-Aug-14
mini    1-Aug-14    3-Sep-14
sara    25-Jun-14   27-Jun-14
steve   12-Jun-14   3-Jul-14
stan    2-Jun-14    2-Aug-14
pete    3-Jul-14    9-Aug-14
tara    5-Jul-14    5-Sep-14

我需要创建一个表格,显示一个人是否在每个月初开始运行

  • 2014年7月1日有3人参加马拉松比赛:迈克, 史蒂夫,斯坦
  • 2014年8月1日有5个人:nike,mini,stan, 皮特,塔拉
  • 2014年9月1日有2人:mini,tara
  • 等。 。

所需的表格应如下所示

person  running on
mike    1-Jul-14
nike    1-Aug-14
mini    1-Aug-14
mini    1-Sep-14
steve   1-Jul-14
stan    1-Jul-14
stan    1-Aug-14
pete    1-Aug-14
tara    1-Aug-14
tara    1-Sep-14

现在,要做到这一点,我每个月都会运行一个单独的查询。 这非常乏味我怀疑我应该使用recursive,但我不知道如何在这里实现它。

PS:我有Teradata 14的所有功能,除了我不能写自己的udfprocedures。如何使用Teradata sql获取决赛桌?

1 个答案:

答案 0 :(得分:5)

不需要递归或过程,这是使用一些专有的Teradata SQL扩展来完成的:

SELECT person, BEGIN(pd)
FROM vt
EXPAND ON PERIOD(start, end) AS pd BY ANCHOR MONTH_BEGIN