Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从表中查找日期值的最小值_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

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

我有一个SQLServer2008表,其中包含列指定ID和新指定ID。我想根据日期查找加入指定id。我不知道怎么做

我的SQL Server表结构如下所示:

 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