我有下表:
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
对于TIME
组,我希望LADLE
的最大值为ID & BLOWNUMBER
。
需要输出:
124 1 01/01/2012
124 2 04/01/2012
125 2 04/06/2012
答案 0 :(得分:6)
如果您正在使用SQL Server(或支持CTE&{39}和ROW_NUMBER
的其他引擎),您可以使用此CTE(公用表表达式)查询:
;WITH CTE AS
(
SELECT
ID, BlowNumber, [Time],
RN = ROW_NUMBER() OVER (PARTITION BY ID, BLOWNUMBER ORDER BY [Time] DESC)
FROM Sample
)
SELECT *
FROM CTE
WHERE RN = 1
请参阅此SQL Fiddle here for an online live demo。
这个CTE"分区"您的数据由(ID, BLOWNUMBER)
生成,ROW_NUMBER()
函数从1开始为每个"分区"分配数字,由[Time]
列排序(最新时间)价值第一)。
然后,您只需从该CTE中选择并使用RN = 1
获取最新的每个数据分区。
答案 1 :(得分:0)
如果您使用的是sqlite(可能与其他数据库兼容);你可以这样做:
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;