复制另一个时期的行

问题描述 投票:0回答:1

我有一个查询,如下所示:

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分钟的时间并加入输出的两个表?

sql sql-server tsql
1个回答
1
投票

我会添加额外的分钟来添加。如果我理解正确:

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);

请注意,我添加了一个表别名并限定了所有列引用。另外,我从列名中删除了单引号。仅对字符串和日期常量使用单引号。

© www.soinside.com 2019 - 2024. All rights reserved.