2012-10-11 58 views
2

我有這個查詢,它的工作原理應該如此。但是,我在查詢中返回[id2]列下相同的int值時出現問題。我只需要獲取價值的一個實例而忽略另一個實例就需要幫助。基本上抓住一個獨特的[id2]。任何幫助將不勝感激。另外,如果您需要澄清,請告訴我。忽略特定列中的相同值

SELECT [id],[id1] 
,[id2] 
,[name] 
,[date] 
,[user]  
FROM [MyDatabase.table] 
Where [date]>= dateadd(day,datediff(day,0,getdate()),-5) 
ORDER BY [cid] 

編輯1:

id1  id2 name  time    user 
6466 171477 item1 2012-10-10 07:08:48.000 user1 
6469 171477 item1 2012-10-10 07:11:01.000 user1 
6468 171477 item1 2012-10-10 07:10:37.000 user1 
6465 171477 item1 2012-10-10 07:07:43.000 user1 
6464 171477 item1 2012-10-10 07:06:58.000 user1 
6467 171477 item1 2012-10-10 07:09:35.000 user1 
6474 173026 item2 2012-10-10 10:20:21.000 user2 
6478 173297 item3 2012-10-10 11:31:55.000 user3 
6472 175445 item4 2012-10-10 07:18:17.000 user1 
6460 175977 item5 2012-10-08 07:42:39.000 user4 
6473 176253 item6 2012-10-10 10:18:21.000 user2 
6471 176253 item6 2012-10-10 10:15:03.000 user2 
6470 176253 item6 2012-10-10 10:14:34.000 user2 

應該是:

id1  id2 name  time    user 
6466 171477 item1 2012-10-10 07:08:48.000 user1 
6474 173026 item2 2012-10-10 10:20:21.000 user2 
6478 173297 item3 2012-10-10 11:31:55.000 user3 
6472 175445 item4 2012-10-10 07:18:17.000 user1 
6460 175977 item5 2012-10-08 07:42:39.000 user4 
6473 176253 item6 2012-10-10 10:18:21.000 user2 
+0

如果你有在重複列,其他列呢?請發表您的表格樣本,並輸出樣本的樣本 –

+0

什麼邏輯決定忽略哪些時間以及包含哪些時間?你的例子看起來像你的時間和id1字段是完全任意的。以id2 171477爲例。你選擇的時間不是id2的最早或最晚的時間。您選擇的id1既不是id2的最低也不是最高。 – RThomas

+0

好吧,我只想要id2列只顯示171477的一個實例。時間和id1真的沒有禁止輸出。 – ertdiddy

回答

1
;WITH tbl_online AS (
SELECT [id],[r_id] 
,[cid] 
,[name] 
,[date] 
,[user] ,ROW_NUMBER() OVER (
PARTITION BY [cid] ORDER BY [cid]) AS Rnum 
FROM [MyDatabase.table] 
Where [date]>= dateadd(day,datediff(day,0,getdate()),-5) ) 
SELECT * FROM tbl_online WHERE Rnum !>1 
ORDER BY [cid] 
+0

謝謝!像魅力一樣工作。 – ertdiddy

+3

當人們使用標準和簡單的'Rnum = 1'時,爲什麼會使用非標準的,專有的(對SQL服務器)和令人困惑的'Rnum!> 1',這超出了我的理解。 –

2

您可能需要調整請根據您要如何選擇返回哪一行ORDER BY部分。

WITH cteRowNum AS (
    SELECT id1, id2, name, time, user, 
      ROW_NUMBER() OVER(PARTITION BY id2 ORDER BY time) AS RowNum 
     FROM MyDatabase.Table 
) 
SELECT id1, id2, name, time, user 
    FROM cteRowNum 
    WHERE RowNum = 1; 
0

你似乎在尋找名單對於一個給定(ID2,名稱)的最早記錄,以下查詢檢索它們:

SELECT a.* 
FROM 
    YourTable a 
    JOIN 
    (
     SELECT MIN(id1) as id1, id2, name FROM YourTable GROUP BY id2, name 
    ) as b 
    ON a.id1 = b.id1 
+0

乍一看是...但是id2的另一個值6464更低,低於他選擇的那個? – RThomas

+0

感謝您的評論@RThomas,另一個猜測,他正在尋找基於(id2,名稱)元組的最早記錄:) – Vikdor