2016-02-25 57 views
0

我有一系列外鍵,每個鍵構成表中的多行。我怎樣才能只提取符合指定條件的頂行?從表中爲每個主鍵獲取頂部數據

我有表這樣

ID NAME  DATE 
---------------------- 
1  abc  5/10/15 
1  abc  6/11/15 
2  pqr  7/11/15 
2  pqr  8/10/15 
3  xyz  9/12/15 

我需要輸出是這樣

其中所述病症是日期> 15年5月11日和ID中(1,2)

ID NAME DATE 
----------------- 
1 abc 6/11/15 
2 pqr 7/11/15 
+0

請與您正在使用的數據庫標記您的問題,並定義您通過「頂」的意思。 –

+0

我正在使用mysql – user3894721

+0

同樣默認情況下,如果我沒有按日期排序,它按升序排列。 我可以按照我在(2,1) – user3894721

回答

1

你可以用row_number()來做你想做的事。我不確定你想要什麼。我最好的猜測越來越有符合條件的最小日期行:

select t.* 
from (select t.*, 
      row_number() over (partition by id order by date) as seqnum 
     from t 
     where date > '2015-11-05' and id in (1, 2) 
    ) t 
where seqnum = 1; 
+0

不應該是DESC嗎? – sagi

+0

感謝使用行號和分區工作。得到所需的輸出。 – user3894721

0

使用NOT EXISTS只要返回行,因爲沒有其他行具有相同的名稱和一個較早的日期:

select t1.* 
from tablename t1 
where not exists (select * from tablename t2 
        where t2.name = t1.name 
        and t2.date < t1.date 
        and t2.date > '5/11/15' and t2.ID in (1,2)) 
    and t1.date > '5/11/15' and t1.ID in (1,2) 

JOIN替代,也許更能MySQL的答案:

select t1.* 
from tablename t1 
    join (select name, min(date) from tablename 
      where date > '5/11/15' and t2.ID in (1,2) 
      group by name) as t2 
     on t1.name = t2.name and t1.date = t2.date 
where t1.date > '5/11/15' and t1.ID in (1,2) 

核心SQL-99。

+0

這樣的條件中指定的順序獲取數據嗎?這不會做他所要求的,他的示例中的xyz將被選中 – sagi

+0

沒有注意到那部分。即將編輯。敬請關注! – jarlh

+0

MySQL支持cte的嗎?會讓事情變得更簡單... – jarlh