【发布时间】:2018-01-31 14:18:16
【问题描述】:
我正在尝试在单个查询中查找列的最大值、最小值、平均值和最后一个值。 平台:SQL Server 2012
样本表:
SN Month Acc Bal
------------------------
1 7 101 1,000/-
2 7 101 1,500/-
3 7 101 1,700/-
4 8 101 1,200/-
5 8 101 900/-
6 9 101 2,500/-
我写的查询:
select
[Month], [Acc],
min(Bal) as MinBal,
avg(Bal) as AvgBal,
max(Bal) as MaxBal
--, ??? for as LastBal
from
MyTable
Group By
[Month], [Acc]
使用Last_Value 查询返回所有记录而不是聚合记录
select
[Month], [Acc],
min(Bal) as MinBal,
avg(Bal) as AvgBal,
max(Bal) as MaxBal,
LAST_VALUE(Bal) OVER (partition by [Acc] order by [Month]) as LastBal
from
MyTable
Group By
[Month], [Acc], Bal
还包括 last_value(bal) 正在生成一个错误,其中 bal 需要按列表分组
选择列表中的“Bal”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
【问题讨论】:
-
LAST_VALUE,也许? -
定义你对last的定义。
-
last_value 给了我所有记录,而不是汇总的几条记录
-
试试
LAST_VALUE(Bal) OVER (partition by [Acc], [Month] order by SN) -
添加 last_value 要求我按列表添加 bal 列
标签: sql-server database tsql