2015-02-11 112 views
0

請參閱下面的DDL:使用SQL或TSQL

CREATE TABLE Groups 
(
    GroupID integer not null, 
    Dataset int, 
    URN int, 
    DateAdded datetime 
) 

INSERT INTO Groups(1,1,100,'2010-01-01') 
INSERT INTO Groups(1,1,191,'2011-01-01') 
INSERT INTO Groups(1,1,65,'2012-01-01') 
INSERT INTO Groups(1,2,121,'2013-01-01') 

INSERT INTO Groups(2,1,87,'2010-01-01') 
INSERT INTO Groups(2,1,1081,'2011-01-01') 
INSERT INTO Groups(2,1,32,'2012-01-01') 
INSERT INTO Groups(2,1,16,'2013-01-01') 
INSERT INTO Groups(2,2,66,'2013-01-01') 

我試圖返回一個表是這樣的:

100 191 
100 65 
87 1081 
87 32 
87 16 

塔1組ID和列2是URN。列表滿足標準:

  1. 選自

  2. 始終顯示最早URN獲取爲1的數據集中的所有記錄(使用dateadded)在第1列(其中,數據集= 1)。在柱2把另一個URN選自(其中數據集= 1)

  3. 確保所有的URN(WHERE數據集= 1)從該組中的第2列中出現一次,除了出現在列中的URN 1

我相信我必須以編程方式(使用TSQL)來完成此操作,但是我想知道是否有一種使用SQL的方法。

+0

您的結果不符合你們所要求的。根據你的要求,你應該只能得到2條記錄(每組一個)。 – 2015-02-11 21:34:16

+0

@D斯坦利,我編輯了要求,試圖使其更加清晰。 – w0051977 2015-02-11 21:37:16

+0

它仍然不匹配。組1中最古老的URN爲100,而組2中最古老的URN爲78.除了最老的一個,您正在顯示所有記錄。 – 2015-02-11 21:39:12

回答

1

您可以使用FIRST_VALUE獲得各組的最古老的URN

SELECT FIRST_VALUE(URN) OVER (PARTITION BY GroupID ORDER BY DateAdded) AS OldestURN, URN 
FROM Groups 
WHERE Dataset = 1 

輸出:

OldestURN URN 
--------------- 
100   100 
100   191 
100   65 
87   87 
87   1081 
87   32 
87   16 

然後,只需窩內另一個上面查詢得到僅記錄OldestURN <> URN

SELECT OldestURN, URN 
FROM (
    SELECT FIRST_VALUE(URN) OVER (PARTITION BY GroupID ORDER BY DateAdded) AS OldestURN, 
      URN 
    FROM Groups 
    WHERE Dataset = 1) t 
WHERE OldestURN <> URN 

輸出:

OldestURN URN 
--------------- 
100   191 
100   65 
87   1081 
87   32 
87   16 
+0

謝謝。我認爲這可能會做到。 +1。我會明天測試並報告回來。 – w0051977 2015-02-11 22:20:15