2012-02-14 33 views
1

enter image description here從結果獲得第一個記錄集

我只想選擇高亮顯示的記錄。我怎麼能在SQL中,最好是在LINQ中。有一個單獨的表EmpEmployeeID作爲PK。 這裏是我的表

架構

enter image description here

+1

所以你要組對僱員但你用什麼來決定'第一'是什麼? – Ray 2012-02-14 09:23:40

+0

@NeilKnight它看起來像我正確地要求代碼,但它不是這樣,我已經與秩嘗試,但不能安靜得到結果 – 2012-02-14 09:24:18

+0

@射線我想獲得'FromDate',但有重複的行不是不受歡迎的,但每個重複行的第一行的'FromDate'將用作應用程序中的加入日期 – 2012-02-14 09:26:40

回答

2

我可以的路要走,但我相信下面的語句滿足您的要求

SELECT * 
FROM (
     SELECT e.EmployeeID, h.FromDate, h.ToDate 
       , rn = ROW_NUMBER() OVER (PARTITION BY e.EmployeeID ORDER BY DesignationID DESC) 
     FROM employee e 
       INNER JOIN history h ON h.EmployeeID = e.EmployeeID 
     ) eh 
WHERE rn = 1 
+0

歷史表包含他們加入後第一天的員工退出歷史記錄。在每次指定更改時,新的行會添加到歷史記錄表中。我想要的是獲得結果集的第一行,以便找到員工加入的日期,因此,當我接受員工表和歷史表的連接時,它會顯示同一員工的多行「FromDate」第一行決定加入日期... – 2012-02-14 11:27:49

+0

我試圖運行您的查詢,但它給了我以下錯誤'列'EmployeeID'多次指定爲'eh'。' – 2012-02-14 11:28:51

+0

@john - 您應該替換'SELECT *括號內的列與您想要返回的列。我編輯了我的答案。查詢應該現在運行沒有問題,但我沒有包含*所有*列根據您的示例。 – 2012-02-14 11:33:20

1

不知道你在找什麼,但嘗試這樣的事情(無子查詢需要,並應在大多數DBMS工作,儘管它看起來像你的運行SQL Server ):

select t1.DisignationHistoryIDs, t1.employeeId, t1.fromDate from history t1 
left join history t2 
on t1.employeeId = t2.employeeId and t1.fromDate > t2.fromDate 
where t2.fromDate is null 

這應該工作得到最早的從日期。要獲得最新的日期,只需將>更改爲<即可。

+0

我已更新問題 – 2012-02-14 09:32:46

+0

試試這個,它應該工作。 – 2012-02-14 09:50:17

1

看不清你在問什麼。突出顯示的ID只是唯一的事件。所以,你可以做到這一點很容易:

SELECT DISTINCT EmployeeID FROM MyTable 
+0

distinct在這裏不會幫助 – 2012-02-14 09:32:37

+2

DISTINCT會給你完整的黃色突出顯示的ID列表。這就是你要求的。如果你可以更清楚你想做什麼,也許我可以提出另一個建議。 – njr101 2012-02-14 09:33:51

2

嘗試:

select * from 
(select t.*, 
     row_number() over (partition by EmployeeID order by FromDate) as rn) sq 
where rn = 1 
+1

這是我最初發布的,但它不適用於ID的256,257。 – 2012-02-14 10:03:43

+1

應該適用於256而不是257,如截圖所示。這一切都取決於約翰張貼一些澄清,他**實際**想要什麼...... – 2012-02-14 10:13:49

相關問題