SQL - 获取几组记录的总和

SQL - Get the sum of several groups of records

期望的结果

获取所有 [Hours] 的小时总和,仅包括来自每个 [DevelopmentID] 的单个结果,其中 [修订] 是最高值

例如 SUM 1、2、3、5、6(结果应为 22.00)

我一直在尝试获得适当的分组。

DECLARE @CompanyID INT = 1

SELECT  
  SUM([s].[Hours]) AS [Hours]
FROM
  [dbo].[tblDev] [d] WITH (NOLOCK)
JOIN
  [dbo].[tblSpec] [s] WITH (NOLOCK) ON [d].[DevID] = [s].[DevID]
WHERE   
  [s].[Revision] = (
    SELECT MAX([s2].[Revision]) FROM [tblSpec] [s2]
  )
GROUP BY
  [s].[Hours]

如果你想要每个 DevId 一行,那么它应该在 GROUP BY 中(并且大概也在 SELECT 中):

SELECT s.DevId, SUM(s.Hours) as hours
FROM [dbo].[tblDev] d JOIN
     [dbo].[tblSpec] s
     ON [d].[DevID] = [s].[DevID]
WHERE s.Revision = (SELECT MAX(s2.Revision) FROM tblSpec s2)
GROUP BY s.DevId;

另外,除非您真的知道自己在做什么,否则不要使用 WITH NOLOCK——我猜您不知道。它基本上是一个许可证,上面写着:“即使数据不是 100% 准确,你也可以得到我的数据。”

我也会放弃所有的方括号。它们只会让查询更难编写和阅读。

使用row_number()识别最新版本

SELECT SUM([Hours])
FROM   (
           SELECT *, R = ROW_NUMBER() OVER (PARTITION BY d.DevID
                                                ORDER BY s.Revision)
           FROM   [dbo].[tblDev] d
           JOIN   [dbo].[tblSpec] s 
             ON   d.[DevID] = s.[DevID]
       ) d
WHERE  R = 1