Sql 分组依据-如何检索关联字段?

Sql 分组依据-如何检索关联字段?,sql,sql-server,tsql,greatest-n-per-group,Sql,Sql Server,Tsql,Greatest N Per Group,以下SELECT语句的预期结果: ('2015-01-15',110,'John') 下面是一些帮助我的代码 DECLARE @MyTableVar table( arrival_date date, nb_sales int, name varchar(255) ) insert into @MyTableVar values ('2015-01-15',121,'James'), ('2015-01-15',110,'John') select arrival_date, MIN(

以下SELECT语句的预期结果:

('2015-01-15',110,'John')
下面是一些帮助我的代码

 DECLARE @MyTableVar table(
arrival_date date,
nb_sales int,
name varchar(255)
)

insert into @MyTableVar values
('2015-01-15',121,'James'),
('2015-01-15',110,'John')

select 
arrival_date,
MIN(nb_sales) as nb_sales,
name <<-- What should I put knowing I can't put MIN or MAX ?
from @MyTableVar
group by arrival_date

您可以使用窗口功能:

;WITH cte AS
(
  SELECT *, r = ROW_NUMBER() OVER(PARTITION BY arrival_date ORDER BY nb_sales)
  FROM @MyTableVar
)
SELECT arrival_date, nb_sales, name
FROM cte
WHERE r = 1;

如果可以进行连接,并且您希望两者都使用秩而不是行号,则可以使用窗口功能:

;WITH cte AS
(
  SELECT *, r = ROW_NUMBER() OVER(PARTITION BY arrival_date ORDER BY nb_sales)
  FROM @MyTableVar
)
SELECT arrival_date, nb_sales, name
FROM cte
WHERE r = 1;

如果可以连接,并且您希望两者都使用RANK而不是ROW_NUMBER,则可以将组连接到原始数据集,并从连接创建的结果集获取名称:

select x2.*
    from (
    select 
      arrival_date,
      MIN(nb_sales) nb_sales
    from @MyTableVar
    group by arrival_date) x1
    inner join @MyTableVar x2 on 
      x1.arrival_date = x2.arrival_date and 
      x1.nb_sales = x2.nb_sales

您可以将组加入原始数据集,并从通过加入创建的结果集中获取名称:

select x2.*
    from (
    select 
      arrival_date,
      MIN(nb_sales) nb_sales
    from @MyTableVar
    group by arrival_date) x1
    inner join @MyTableVar x2 on 
      x1.arrival_date = x2.arrival_date and 
      x1.nb_sales = x2.nb_sales

如果多行在同一天具有相同的最小销售额,您希望发生什么?如果多行在同一天具有相同的最小销售额,您希望发生什么?