Sql server 从表中查找日期值的最小值
我有一个SQLServer2008表,其中包含列指定ID和新指定ID。我想根据日期查找加入指定id。我不知道怎么做 我的SQL Server表结构如下所示:Sql server 从表中查找日期值的最小值,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我有一个SQLServer2008表,其中包含列指定ID和新指定ID。我想根据日期查找加入指定id。我不知道怎么做 我的SQL Server表结构如下所示: Designationid NewDesignationID UniqueID EmployeeID FromDate ToDate Comments ApprovedDate ModifiedBy ModifiedDate StatusID ChangeTo CreatedBy
Designationid NewDesignationID UniqueID EmployeeID FromDate ToDate Comments ApprovedDate ModifiedBy ModifiedDate StatusID ChangeTo CreatedBy CreatedDate
12 25 258 1700 7/19/2011 7/27/2011 Designation Change 7/28/2011 61 7/28/2011 8 Executive - HR - Associate Executive - HR 61 7/28/2011
25 132 458 1700 7/28/2011 6/27/2012 Designation Change 6/28/2012 1700 6/28/2012 8 Associate Executive - HR To RMG Executive 1700 6/28/2012
25 132 510 1700 7/13/2012 8/2/2012 Designation Change 8/3/2012 1700 8/3/2012 8 Associate Executive - HR To RMG Executive 1700 8/3/2012
132 25 507 1700 6/28/2012 7/12/2012 Designation Change 7/13/2012 1896 7/13/2012 8 RMG Executive To Associate Executive - HR 1896 7/13/2012
select
T.EmployeeID, T.Designationid, T.NewDesignationID
from <Table> as T
where
not exists (
select *
from <Table> as TT
where TT.EmployeeID = T.EmployeeID and TT.FromDate < T.FromDate
)
我还想为每个特定的雇员ID做这件事。目前,我已经为单个EmployeeId完成了此操作。如果您只需要一行,您可以使用top 1并按…订购: 你的问题有一些微妙之处,这一点已经讨论过很多次了。其中一个问题是-如果您有两个记录具有相同的FromDate和相同的EmployeeID,您是希望同时获得这两个记录,还是仅获取一个记录(如果需要),那么您想要哪一个记录?。如果两行都需要,可以使用如下方法:
Designationid NewDesignationID UniqueID EmployeeID FromDate ToDate Comments ApprovedDate ModifiedBy ModifiedDate StatusID ChangeTo CreatedBy CreatedDate
12 25 258 1700 7/19/2011 7/27/2011 Designation Change 7/28/2011 61 7/28/2011 8 Executive - HR - Associate Executive - HR 61 7/28/2011
25 132 458 1700 7/28/2011 6/27/2012 Designation Change 6/28/2012 1700 6/28/2012 8 Associate Executive - HR To RMG Executive 1700 6/28/2012
25 132 510 1700 7/13/2012 8/2/2012 Designation Change 8/3/2012 1700 8/3/2012 8 Associate Executive - HR To RMG Executive 1700 8/3/2012
132 25 507 1700 6/28/2012 7/12/2012 Designation Change 7/13/2012 1896 7/13/2012 8 RMG Executive To Associate Executive - HR 1896 7/13/2012
select
T.EmployeeID, T.Designationid, T.NewDesignationID
from <Table> as T
where
not exists (
select *
from <Table> as TT
where TT.EmployeeID = T.EmployeeID and TT.FromDate < T.FromDate
)
试试这个结构,你的样品不清楚
SELECT EmployeeID,
min(FromDate)
FROM [EmployeeTable]
GROUP BY EmployeeID
我已经这样做了,但我想获得指定。我想根据日期查找加入指定id。这件事我不清楚你想加入哪个列和哪个日期的基。显示输出。我认为CTE查询很简单。所以我修改了它并实现了它,就像EmployeeDesignChange作为SelectRow\u NUMBER OVERPARTITION BY EmployeeID ORDER BY FromDate作为StartLevel一样,*从tbl_PM_EmployeeDesignation_Change(其中FromDate不为空)中选择employeeid,从EmployeeDesignation Change中选择SignationId,其中StartLevel=1;
select
T.EmployeeID, TT.Designationid, TT.NewDesignationID
from (select distinct TT.EmployeeID from <Table> as TT) as T
outer apply (
select top 1
TT.Designationid, TT.NewDesignationID
from <Table> as TT
where TT.EmployeeID = T.EmployeeID
order by TT.FromDate asc
) as TT
SELECT EmployeeID,
min(FromDate)
FROM [EmployeeTable]
GROUP BY EmployeeID