2013-04-25 69 views
1

我想獲得我的表中每條記錄的最短日期,其中有一個主鍵的多條日期條目。看看我的表:查詢以獲取每條記錄的最短日期

CaseNo  Entry_date 
    ABC-001  2/12/13 
    ABC-002  2/09/13 
    ABC-001  1/01/13 
    ABC-001  1/31/13 
    ABC-002  1/01/13 
    ABC-003  2/01/12 
    ABC-003  2/18/13 

我想有這樣的結果:

 CaseNo  Entry_date Min_date 
     ABC-001  2/12/13  1/01/13 
     ABC-002  2/09/13  1/09/13 
     ABC-001  1/01/13  1/01/13 
     ABC-001  1/31/13  1/01/13 
     ABC-002  1/09/13  1/09/13 
     ABC-003  2/01/12  2/01/13 
     ABC-003  2/18/13  2/01/13 

我想記錄在我的表中的每個CaseNo的最小日期。我想這樣的代碼:

Select 
    CaseNo,Entry_date, Min(Entry_date) as Min_date 
from mytable group by CaseNo 

結果是這樣的:

CaseNo  Entry_date Min_date 
    ABC-001  1/01/13  1/01/13 
    ABC-002  1/09/13  1/09/13 
    ABC-003  2/01/12  2/01/13 

代碼中刪除不具有最小日期的行。我想要顯示所有記錄的最短日期爲Min_date

+0

這是SQLServer的? ABC-002的最小值不應該是1/01/13?另外,爲什麼你在這個問題的標題中包含「(轉貼)」? – 2013-04-25 06:54:09

+0

是的我試圖用over(由CaseNo分區),但是在關鍵字'over'附近有一個錯誤的語法錯誤。 – 2013-04-25 07:02:45

+0

Juan Filipe:你還沒有回答我的任何問題(儘管Vinayak確實回答了其中一個問題)。我將重複最重要的一點:**這是SQLServer **,如果不是,那是哪種RDBMS?答案**將**影響如何解決這個問題。 – 2013-04-25 07:11:59

回答

1
Select a.Case_No, 
     a.Entry_date, 
     Min(b.Entry_date) as Min_date 
from mytable a, 
     mytable b 
where a.case_no = b.case_no 
group by a.Case_No, a.entry_date 
order by a.entry_date 

http://sqlfiddle.com/#!2/fe6bd/2

1

您可以用CTE或子查詢解決。 CTE有更好的表現。

子查詢版本

SELECT 
    CaseNo, 
    Entry_date, 
    (SELECT MIN(Entry_date) FROM Cases subc WHERE subc.CaseNo=c.CaseNo GROUP BY CaseNo) AS MinEntryDate 
FROM Cases c; 

CTE版本

WITH CasesMinEntryDate(CaseNo, MinEntryDate) AS 
(
    SELECT CaseNo, MIN(Entry_date) FROM Cases GROUP BY CaseNo 
) 
SELECT 
    c.CaseNo, 
    Entry_date, 
    MinEntryDate 
FROM Cases c 
INNER JOIN CasesMinEntryDate cmed ON c.CaseNo=cmed.CaseNo; 

http://sqlfiddle.com/#!3/0feee/8

相關問題