sql - 为另一个时期复制行
问题描述
我有一个查询,如下所示:
select cast(DATEADD(day,-1,DATEADD(hour,1, INTERVAL_PERIOD_TIMESTAMP)) as date) as 'TradeDate'
, 'P' as 'Currency'
, cast(DATEADD(hour,1, INTERVAL_PERIOD_TIMESTAMP) as date) as 'DeliveryDate'
, cast(INTERVAL_PERIOD_TIMESTAMP as time) as 'DeliveryTime'
, cast(CLEARED_DAM_PRICE as decimal(16,2)) as 'SMP'
, 0 as 'TimeChange'
, GETDATE() as 'DateAdded'
from DAM_RESULT
这将返回一个结果列表,如下所示:
2018-08-11 P 2018-08-12 23:00:00.0000000 37.12 0 2018-09-26 10:52:27.157
2018-08-11 P 2018-08-12 00:00:00.0000000 37.12 0 2018-09-26 10:52:27.157
2018-08-11 P 2018-08-12 01:00:00.0000000 37.12 0 2018-09-26 10:52:27.157
2018-08-11 P 2018-08-12 02:00:00.0000000 35.86 0 2018-09-26 10:52:27.157
2018-08-11 P 2018-08-12 03:00:00.0000000 35.79 0 2018-09-26 10:52:27.157
2018-08-11 P 2018-08-12 04:00:00.0000000 37.12 0 2018-09-26 10:52:27.157
目前我以一小时为单位获得粒度,但我试图与之集成的先前数据模型基于半小时粒度。下面的值显示 23:00 是 37.12 我如何修改我的查询以便以相同的价格在 23:30 添加另一行?
有没有比通过将时间增加 30 分钟并加入输出的两个表来执行此操作更好的选择?
解决方案
我会在额外的几分钟内添加。如果我理解正确:
select cast(DATEADD(day, -1, DATEADD(hour, 1, dr.INTERVAL_PERIOD_TIMESTAMP)) as date) as TradeDate,
'P' as Currency,
cast(DATEADD(minute, 60 + v.additional_minutes, dr.INTERVAL_PERIOD_TIMESTAMP) as date) as DeliveryDate,
cast(dr.INTERVAL_PERIOD_TIMESTAMP as time) as DeliveryTime,
cast(dr.CLEARED_DAM_PRICE as decimal(16, 2)) as SMP,
0 as TimeChange,
GETDATE() as DateAdded
from DAM_RESULT dr CROSS JOIN
(VALUES (0), (30)) as v(additional_minutes);
请注意,我添加了一个表别名并限定了所有列引用。此外,我从列名中删除了单引号。仅对字符串和日期常量使用单引号。
推荐阅读
- python - 将 DataFrame 值转换为 int,添加它们并使用结果创建新列?
- angularjs - 从 IONIC 到 BHIM 的 UPI 深度链接 - Ionic1 (WebIntent)
- cross-browser - 哪些浏览器支持 stale-if-error 和 stale-while-revalidate?
- tensorflow - 如何在没有附带ckpt文件的情况下在tensorflow中初始化pb文件的变量?
- node.js - 如何在 Nodejs MongoDb 中进行连接连接池
- python - 为什么将列表分配给另一个列表会产生“无”?
- jquery - 如何从json中获取事件
- html - 在 bootstrap 4 中使用类行时将元素放在页面右侧
- function - 如果成员函数存在,如何引用或调用成员函数
- c# - 字符串替换为空字符