将一个 table 的行与另一个 table 的总和值相连接

Joining row from one table with the sum value from another table

我有 table IPAddressHistory,其中包含三列 IPAddressIDDateFromDateTo,以及另一个 table IPAddressTimeValue,具有特定时间的详细值。因此,我需要 IPAddressTimeValueIPAddressTimeValueDateFromIPAddressID 相关的 select SUM 值和 DateTo 来自 IPAddressHistory。您可以从 sqlfiddle 中看到我想要的内容,例如,我使用了来自 IPAddressHistory 和 UNION ALL 的简单静态日期。谢谢。

初始tables:

CREATE TABLE IPAddressHistory(
  [IPAddressHistoryID] int IDENTITY(1,1) NOT NULL,
  [IPAddressID] int NOT NULL,
  [DateFrom] datetime,
  [DateTo] datetime,
CONSTRAINT [PK_IPAddressHistory] PRIMARY KEY CLUSTERED 
(
    [IPAddressHistoryID] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY];

CREATE TABLE IPAddressTimeValue(
  [IPAddressTimeValueID] int IDENTITY(1,1) NOT NULL,
  [IPAddressID] int NOT NULL,
  [Time] datetime,
  [CCNI] int,
  [TRNI] int,
CONSTRAINT [PK_IPAddressTimeValue] PRIMARY KEY CLUSTERED 
(
    [IPAddressTimeValueID] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY];

初始数据:

结果输出:

不知道我理解的对不对,您需要这样的东西吗?通过 IPAddressID 加入 tables 并在 WHERE 子句中使用来自 History table 的 DateFromDateTo?

已更新

select h.IPAddressID, sum(CCNI) as CCNI, sum(TRNI) as TRNI, DateFrom, DateTo 
from IPAddressHistory h
left join IPAddressTimeValue v on h.IPAddressID = v.IPAddressID 
where v.[time] > h.DateFrom and v.[time] <= h.DateTo
group by h.IPAddressID, DateFrom, DateTo

您可以在以下位置进行测试:SQL FIDDLE

您需要查询的是这个:

select a.[IPAddressID], 
       a.[DateFrom], 
       a.[DateTo], 
       SUM([CCNI]) [CCNI], 
       SUM([TRNI]) [TRNI]
  from IPAddressHistory a
         INNER JOIN IPAddressTimeValue b 
                ON (a.[IPAddressID] = b.[IPAddressID])
 where b.[Time] > a.[DateFrom]
   and b.[Time] <= a.[DateTo]
 group by a.[IPAddressID], a.[DateFrom], a.[DateTo];

看到它在这里与你自己的 select 工会一起工作:http://sqlfiddle.com/#!6/abfe6/5

要根据需要格式化日期(datefrom 和 dateto),只需使用一些日期格式函数。不要忘记在分组依据的 select 字段上使用它。