2012-02-14 55 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

相关问题