2012-11-14 163 views
3

得到相應的基於組的列的最大值另一列的值,我有如下表:SQL查詢通過

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  

我想有TIMELADLE的最大值組ID & BLOWNUMBER

輸出要求:

124  1  01/01/2012 
124  2  04/01/2012 
125  2  04/06/2012 
+0

那'TIME'柱看起來極像一個** **日期(而非時間.....) –

+1

*** *** SQL剛好在結構*查詢語言* - 許多數據庫系統使用的語言,但不是數據庫產品......這樣的東西可能非常特定於供應商 - 所以我們確實需要知道什麼**數據庫系統**(以及哪個版本)重新使用.... –

+0

這是一個功課題嗎? – Gijs

回答

6

如果你使用SQL Server(或支持的CTE和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即可獲取每個數據分區的最新信息。

+0

爲什麼不直接使用內部查詢? – as9876

+0

@AYS:我發現CTE比嵌套子查詢更清晰,更直觀.... –

0

如果您使用的是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;