聚合函数以提取更多记录字段数据
Posted
技术标签:
【中文标题】聚合函数以提取更多记录字段数据【英文标题】:Aggregate Functions To Pull More Record Field Data 【发布时间】:2016-07-01 09:53:10 【问题描述】:我想知道当我使用 Group By 查询时从特定行获取数据的最佳方式是什么。实际查询比我在此处提供的示例更复杂,因此我正在寻找除 Sales 表上的子选择以外的其他内容。
我正在使用 MSSQL 2008,我想要一些允许我从具有最大值(数量)的销售记录中获取日期字段的东西。
查询
select uid, firstName, lastName, AmountFromTagetedRow, DateFromTargetedRow,
from users u inner join
sales s on u.uid = s.custID
group by uid, firstName, lastName
order by uid
用户
uid firstName lastName
1 Sam Smith
2 Joe Brown
3 Kim Young
销售
sid Custid date amount ...
1 1 2016-01-02 100
2 3 2016-01-12 485
3 1 2016-01-22 152
4 2 2016-02-01 156
5 1 2016-02-02 12
6 1 2016-03-05 84
7 2 2016-03-10 68
结果
uid firstName LastName amount date
1 Sam Smith 152 2016-01-22
2 Joe Brown 156 2016-02-01
3 Kim Young 485 2016-01-12
【问题讨论】:
假设 Results 是您想要的输出? TargetedRow 是什么意思?您希望执行什么聚合功能? 克里斯,如果问题不是很清楚,抱歉。肖恩回答了这个问题。我一直坚持在一个 Group By 语句中执行此操作,但使用 WITH 和 ROW_NUMBER() 是获得所需内容的最佳方式。 【参考方案1】:您发布的查询与您的金额不匹配,但类似这样的内容应该会让您指向正确的方向。
with SortedResults as
(
select uid
, firstName
, lastName
, AmountFromTagetedRow
, DateFromTargetedRow
, ROW_NUMBER() over (partition by u.uid order by AmountFromTagetedRow desc) as RowNum
from users u inner join
sales s on u.uid = s.custID
group by uid
, firstName
, lastName
)
select *
from SortedResults
where RowNum = 1
order by uid
【讨论】:
谢谢肖恩。我在这个问题上得到了隧道视野,忘记了我可以用 WITH 来做这个。以上是关于聚合函数以提取更多记录字段数据的主要内容,如果未能解决你的问题,请参考以下文章