2014-01-25 51 views
0

因此,這個問題可能已經得到解答,但搜索甚至詢問它有點困難。SQL Server - 選擇表中的所有值而不在GROUP BY中

我想查詢一個表並以多種方式對其進行過濾。在下面的例子中,我想知道每個部門的第一名員工是誰。

例見下表Table A

employee_id | dept_id | start_date | name | age | sex 
      1 |  1 | 1/5/2000 | Bill | 25 | m     
      2 |  2 | 2/5/2000 | Biff | 30 | m     
      3 |  2 | 3/6/2002 | Gil | 31 | m     
      4 |  2 | 3/7/2002 | Mar | 27 | f      
      5 |  3 | 1/5/2000 | Tina | 24 | f       
      6 |  3 | 1/5/2000 | Lin | 21 | f        

所以,如果我做SELECT dept_id, min(start_date) from Table A GROUP BY dept_id ORDER BY min(start_date)

我會得到

dept_id | start_date 
     1 | 1/5/2000     
     2 | 2/5/2000      
     3 | 1/5/2000 

哪個是正確的信息,但我需要其他列。我不能將它們添加到SELECT語句中,因爲它們不在GROUP BY中,我不能將它們添加到GROUP BY中,因爲那樣我就不會得到正確的結果。

此評論的回答我的問題,但不完全SQL Select Distinct Values, but order by a different value ,因爲我試圖做一個聯接內的子查詢,並在SELECT中添加字段,但它仍然希望字段在GROUP BY。

請告知

編輯: 我希望得到的結果是

employee_id | dept_id | start_date | name | age | sex 
      1 |  1 | 1/5/2000 | Bill | 25 | m     
      2 |  2 | 2/5/2000 | Biff | 30 | m     
      5 |  3 | 1/5/2000 | Tina | 24 | f       
+1

請具體說明您需要的其他領域。現在,你想要一個人出發的最早日期。清晰的業務規則有助於我們給出明確的答案! –

回答

1

你想用row_number()

select employee_id, dept_id, start_date, name, age, sex 
from (select a.*, row_number() over (partition by dept_id order by start_date) as seqnum 
     from table a 
    ) a 
where seqnum = 1; 

row_number()是分配序列號功能到行組。這些組由partition by子句定義,因此在這種情況下,同一部門中的每個人都在同一個組中。這些號碼按照order by條款的順序進行分配。因此,最早的開始日期的值爲1. where子句然後選擇這些記錄。

1

找出第一人稱每個部門

DECLARE @Table TABLE(employee_id INT,dept_id INT,[start_date] DATE 
    ,name VARCHAR(10),age INT, sex CHAR(1)) 
INSERT INTO @Table VALUES 
(1,1,'1/5/2000','Bill',25,'m'),     
(2,2,'2/5/2000','Biff',30,'m'),     
(3,2,'3/6/2002','Gil',31,'m'),     
(4,2,'3/7/2002','Mar',27,'f'),      
(5,3,'1/5/2000','Tina',24,'f'),       
(6,3,'1/5/2000','Lin',21,'f') 

SELECT * FROM 
(
    SELECT * 
    , rn = ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY [start_date] ASC) 
    FROM @Table 
)Q 
WHERE rn = 1 

結果集

╔═════════════╦═════════╦════════════╦══════╦═════╦═════╦════╗ 
║ employee_id ║ dept_id ║ start_date ║ name ║ age ║ sex ║ rn ║ 
╠═════════════╬═════════╬════════════╬══════╬═════╬═════╬════╣ 
║   1 ║  1 ║ 2000-01-05 ║ Bill ║ 25 ║ m ║ 1 ║ 
║   2 ║  2 ║ 2000-02-05 ║ Biff ║ 30 ║ m ║ 1 ║ 
║   5 ║  3 ║ 2000-01-05 ║ Tina ║ 24 ║ f ║ 1 ║ 
╚═════════════╩═════════╩════════════╩══════╩═════╩═════╩════╝