下面是我正在使用的CTE,用于计算在给定时间段内发送传输所需的次数。 CTE通过将以秒为单位发送的时间(HT.ElapsedTime)分享60来进行工作。然后生成一个诸如4,6,10等的值。
WITH CTE_Duplicate_Records_Count AS
(
SELECT
H.ObjectGuid AS Transmission_ID
, H.TRDateTime AS [Transmission Start Time]
, HT.[ElapsedTime] / 60 AS [totalCount]
FROM [dbo].History AS H (NOLOCK)
LEFT OUTER JOIN [dbo].HistoryTRX AS HT (NOLOCK) ON H.handle = HT.handle
主选择语句从传输表中提取必要的列,并将上面的CTE连接到传输ID匹配的位置。
SELECT
-- Transmission Table
---------------------
H.ObjectGuid AS Transmission_ID
, CAST(H.[TRDateTime] AS DateTime) AS [Transmission Start Date]
, CAST(DATEADD(second, HT.ElapsedTime, H.TRDateTime) AS DateTime) AS [Transmission End Date]
, HT.[ElapsedTime] AS [Time taken to send in seconds]
, HT.GoodPageCount AS Pages
, HT.[ChannelUsed]
-- CTE Duplicate Records Count
--------------------------
, DRC.Transmission_ID
, DRC.totalCount
FROM [dbo].History AS H (NOLOCK)
LEFT OUTER JOIN [dbo].HistoryTRX AS HT (NOLOCK) ON H.handle = HT.handle
INNER JOIN CTE_Duplicate_Records_Count DRC ON Transmission_ID = H.ObjectGuid
WHERE
DRC.Transmission_ID = 'BFE008F7-F9D6-44D8-B06C-916875FC0F6D'
ORDER BY H.ObjectGuid DESC
作为一个例子,上面的select语句产生如下:
TransmissionID
Transmission Start Date
Transmission End Date
Time Taken in seconds
Pages
TotalCount
BBBBBB
2015-08-04 12:42:45
2015-08-04 12:56:45
840
5
14 (minutes)
所需的结果是每个记录都由totalCount数字复制。即上述记录将重复14次。此外,对于每个重复的行,我想在开始时间添加60秒。
关于如何实现这一目标的任何想法?