我有一个带有时间戳字段的数据表。
对于我正在进行的分析,我需要创建一个7个字段宽的表和24个记录:一周7天和一天24小时。
目标是按周计算特定事件。
凭借我目前在SQL方面的知识水平,我将尝试以下方式:
SELECT EXTRACT(DAY FROM THE_TIMESTAMP_FIELD) = 1, EXTRACT(DAY FROM THE_TIMESTAMP_FIELD) = 2, etc
可是:
SELECT
语句示例将生成该月中的某一天(第1,第2,第3等)。 是否有更好的方式{@ 1}}每周的每一天,而不是每天1:7手动输入SELECT
语句?
我怎么能在teradata中提取日期名称?
答案 0 :(得分:2)
你想要一种PIVOT查询,遗憾的是TD不支持。
但它有可能,看起来像很多源代码,但它主要是剪切&粘贴&修改
假设某个表tab
的时间戳列为ts
,您希望对列col
求平均值:
SELECT
EXTRACT(HOUR FROM ts) as "hour"
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'mon' THEN col END) AS mon
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'tue' THEN col END) AS tue
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'wed' THEN col END) AS wed
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'thu' THEN col END) AS thu
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'fri' THEN col END) AS fri
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'sat' THEN col END) AS sat
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'sun' THEN col END) AS sun
FROM tab
GROUP BY 1
ORDER BY 1
顺便说一下,EXTRACT(DAY...)
不会返回星期几,也就是1月31日