是否使用聚合分组以获取SQL Server中的记录?

是否使用聚合分组以获取SQL Server中的记录?,sql,sql-server,group-by,aggregate-functions,Sql,Sql Server,Group By,Aggregate Functions,我需要对SP列进行分组,并根据T的Min和Max值对其进行过滤,并在Select查询中获得结果 表一 RawS RawI SS SP T 14299 52 14299 105 1 14299 53 14299 105 2 14299 54 14299 105 3 14299 56 14299 106 2 14299 57 14299 106 3 14299 58 14299 107 1 14299 59 1429

我需要对
SP
列进行分组,并根据
T
Min
Max
值对其进行过滤,并在Select查询中获得结果

表一

RawS    RawI  SS    SP  T
14299    52  14299  105 1
14299    53  14299  105 2
14299    54  14299  105 3
14299    56  14299  106 2
14299    57  14299  106 3
14299    58  14299  107 1
14299    59  14299  107 2
14299    60  14299  107 3
我尝试使用小查询,如果我在查询中添加列
Raws
,那么我会得到用于聚合函数的SQL错误

SELECT 
     ar1.SP,
     MIN(ar1.T) AS T1,
     MAX(ar1.T) AS T2 FROM An ar1
     Group by  ar1.SP
需要输出格式

RawS1  RaWI1 RawS2  RawI2 SP     T1  T2
14299   52   14299  54    105    1   3
14299   56   14299  57    106    2   3
14299   58   14299  60    107    1   3
这似乎可以让您获得您想要的结果:

WITH VTE AS(
    SELECT *
    FROM (VALUES (14299,52,14299,105,1),
                 (14299,53,14299,105,2),
                 (14299,54,14299,105,3),
                 (14299,56,14299,106,2),
                 (14299,57,14299,106,3),
                 (14299,58,14299,107,1),
                 (14299,59,14299,107,2),
                 (14299,60,14299,107,3))V(RawS,RawI,SS,SP,T))
SELECT RawS,
       Min(RawI) AS RawI1,
       SS AS RawS2,
       MAX(RawI) AS RawI2,
       SP,
       MIN(T) AS T1,
       MAX(T) AS T2
FROM VTE
GROUP BY RawS,
         SS,
         SP;

不知道为什么会出现错误,因为该查询运行正常,这意味着该查询不是您正在运行的查询。

这里有一个选项供您选择。子查询以获取每个SP的最小和最大T。然后2个联接以获取其他数据

DECLARE @TestData TABLE
    (
        [RawS] INT
      , [RawI] INT
      , [SS] INT
      , [SP] INT
      , [T] INT
    );

INSERT INTO @TestData (
                          [RawS]
                        , [RawI]
                        , [SS]
                        , [SP]
                        , [T]
                      )
VALUES ( 14299, 52, 14299, 105, 1 )
     , ( 14299, 53, 14299, 105, 2 )
     , ( 14299, 54, 14299, 105, 3 )
     , ( 14299, 56, 14299, 106, 2 )
     , ( 14299, 57, 14299, 106, 3 )
     , ( 14299, 58, 14299, 107, 1 )
     , ( 14299, 59, 14299, 107, 2 )
     , ( 14299, 60, 14299, 107, 3 );


SELECT     [a1].[RawS] AS [RawS1]
         , [a1].[RawI] AS [RawI1]
         , [a2].[RawS] AS [RawS1]
         , [a2].[RawI] AS [RawI2]
         , [a].*
FROM       (
               SELECT   [SP]
                      , MIN([T]) AS [T1]
                      , MAX([T]) AS [T2]
               FROM     @TestData
               GROUP BY [SP]
           ) AS [a]
INNER JOIN @TestData [a1]
    ON [a1].[SP] = [a].[SP]
       AND [a1].[T] = [a].[T1]
INNER JOIN @TestData [a2]
    ON [a2].[SP] = [a].[SP]
       AND [a2].[T] = [a].[T2];

这不只是在SP和SS上分组的MIN和MAX函数吗(这不在您所需的输出中)


那么,你一定试过什么了。请不要把文本作为图片发布。您有足够的声誉,知道如何复制和粘贴代码/数据并对其进行格式化。请这样做。请不要图片,并张贴你尝试了什么?请现在检查@LARNU请立即检查@BradWhy with是必需的。我无法理解这个问题。你能解释一下吗@Larnu@PrashantGupta我需要一些样本数据,我可以使用!文本本身不是可消费的,所以我使用了一个CTE(或“VTE”(值表表达式))来编写一个我可以测试的查询@提姆Mylott@PrashantGupta我不知道。这就是我理解您的需求的方式,如果没有更大的数据样本集,就很难知道在其他列上使用聚合函数是否真的能满足您的需求。@PrashantGupta我相信这是一个更小的数据样本集,您正在使用的数据。RawS值是否始终相同?基于SP的RawI值顺序是否始终遵循与T值类似的顺序?我们可能需要更广泛的背景和对您的数据的理解。
with An as (
      select 14299 as RawS ,52 as RawI ,14299 as SS ,105 as SP ,1 as T
union select 14299 as RawS ,53 as RawI ,14299 as SS ,105 as SP ,2 as T
union select 14299 as RawS ,54 as RawI ,14299 as SS ,105 as SP ,3 as T
union select 14299 as RawS ,56 as RawI ,14299 as SS ,106 as SP ,2 as T
union select 14299 as RawS ,57 as RawI ,14299 as SS ,106 as SP ,3 as T
union select 14299 as RawS ,58 as RawI ,14299 as SS ,107 as SP ,1 as T
union select 14299 as RawS ,59 as RawI ,14299 as SS ,107 as SP ,2 as T
union select 14299 as RawS ,60 as RawI ,14299 as SS ,107 as SP ,3 as T
)
select min(RawS) as RawS1
     , min(RawI) as RawI1
     , max(RawS) as RawS2
     , max(RawI) as RawI2
     , SP
     , min(T) as T1
     , max(T) as T2
  from An
group by SP, SS