SQL查询以获取另一列的值,该值对应于基于group by的列的最大值
我有下表:SQL查询以获取另一列的值,该值对应于基于group by的列的最大值,sql,group-by,max,Sql,Group By,Max,我有下表: ID BLOWNUMBER TIME LADLE --- ---------- ---------- ----- 124 1 01/01/2012 2 124 1 02/02/2012 1 124 1 03/02/2012 0 124 2 04/01/2012
ID BLOWNUMBER TIME LADLE
--- ---------- ---------- -----
124 1 01/01/2012 2
124 1 02/02/2012 1
124 1 03/02/2012 0
124 2 04/01/2012 1
125 2 04/06/2012 1
125 2 01/03/2012 0
对于一组ID&BLOWNUMBER
,我想获得时间作为钢包的最大值
所需输出:
124 1 01/01/2012
124 2 04/01/2012
125 2 04/06/2012
如果您使用的是SQL Server(或其他支持CTE和行号
)的引擎),则可以使用此CTE(公共表表达式)查询:
看这个
此CTE通过(ID,BLOWNUMBER)
对数据进行“分区”,并且ROW_NUMBER()
函数从1开始为每个“分区”分配数字,按[Time]
列排序(首先是最新的时间值)
然后,您只需从该CTE中选择,并使用RN=1
获取每个数据分区的最新数据。如果您使用的是sqllite(可能也与其他数据库兼容);你可以做:
select
ct.id
, ct.blownumber
, time
from
new
, (
select
id
, blownumber
, max(ladle) as ldl
from
new
group by
id
, blownumber
) ct
where
ct.id = new.id
and ct.blownumber = new.blownumber
and ct.ldl = new.ladle;
该TIME
列看起来非常像日期(而不是时间…)SQL只是结构化查询语言-许多数据库系统使用的一种语言,但不是数据库产品。。。像这样的东西可能非常特定于供应商-所以我们真的需要知道您使用的是什么数据库系统(以及哪个版本)…这是一个家庭作业问题吗?为什么不使用内部查询呢?
select
ct.id
, ct.blownumber
, time
from
new
, (
select
id
, blownumber
, max(ladle) as ldl
from
new
group by
id
, blownumber
) ct
where
ct.id = new.id
and ct.blownumber = new.blownumber
and ct.ldl = new.ladle;