开发者社区> 问答> 正文

T-SQL代码查找一系列更改的最大和最小日期

我有一张叫的桌子DimWorkerCode。它有一个名为的列WorkerCode。这是我们的业务关键。可能发生的更改WorkerCode是UnitCode,WindowsID如下。我想忽略WindowsID,只是选择WorkerCode,Unitcode并且StartDate这将是最小的StartDate和EndDate这将是最大的EndDate。

我试过这个查询:

SELECT 
    WorkerCode, UnitCode, 
    MIN(StartDate) AS StartDate, 
    MAX(ISNULL(EndDate, '9999/12/31')) AS EndDate 
FROM 
    dbo.DimWorkerCode 
GROUP BY 
    WorkerCode, UnitCode

展开
收起
祖安文状元 2020-01-05 17:59:12 386 0
1 条回答
写回答
取消 提交回答
  • 问题是您试图提取某些数据而不对其进行分组(min(startdate)的结束日期。

    我不确定这是最好的解决方案,但它应该可以工作。使用Row_Number(),我们按min(startdate)和max(enddate)列出记录,而不进行分组;然后您在两个列表的开头处提取记录。

    select
        WorkerCode,
        UnitCode,
        StartDate,
        EndDate
    from
        (
            select      
                WorkerCode,
                UnitCode,
                StartDate,
                EndDate
                row_number() over (partition by WorkerCode, UnitCode order by StartDate) as MinStartDateRow,
                row_number() over (partition by WorkerCode, UnitCode order by EndDate desc) as MaxEndDateRow
            from
                dbo.DimWorkerCode
        ) x
    where
        MinStartDateRow = 1
        or MaxEndDateRow = 1
    
    2020-01-05 17:59:26
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载