SQL Server 2014 - 选择具有两个条件的语句

Posted

技术标签:

【中文标题】SQL Server 2014 - 选择具有两个条件的语句【英文标题】:SQL Server 2014 - select statements with two contitions 【发布时间】:2020-06-10 19:27:13 【问题描述】:

这是交易:我有一个表,其中有一列用于路径,另一列用于日期。由于我是这个 SQL 世界的新手,我不确定哪种语句更适合这个问题。它必须给我:

    如果日期为空,路径列的值或; 如果日期不为空,则路径列的值在其日期列中具有最新的日期值。

需要注意的是,表格最后不能有任何重复的路径。

表格现在的外观示例:

path1         |----------------------------| 
path2         |----------------------------| 
path3         |2020-06-04 00:00:00| 
path3         |2020-06-03 00:00:00| 
path3         |----------------------------| 

现在我有一些查询可以部分解决问题,这里是:

select path_column, date_column 
from my_table a  
where a.date_column = (select max(date_column)  
                       from my_table b  
                       where a.path_column = b.path_column) 
   or date_column IS NULL   

以上查询结果:

path1      |----------------------------| 
path2      |----------------------------| 
path3      |2020-06-04 00:00:00| 
path3      |----------------------------|  

虽然我需要它看起来像这样:

path1      |----------------------------| 
path2      |----------------------------| 
path3      |2020-06-04 00:00:00| 

我的组织目前正在使用 SQL Server 2014。祝您有美好的一天!

【问题讨论】:

【参考方案1】:

使用row_number():

select t.*
from (select t.*,
             row_number() over (partition by path1 order by date desc) as seqnum
      from my_table t
     ) t
where seqnum = 1;

NULLs 被认为是最低值,因此降序排序将它们放在最后。

【讨论】:

【参考方案2】:

可以使用Group By子句:-

select path_column, max(date_column) date_column 
from my_table group by path_column;

有关演示数据,请访问This Link

【讨论】:

以上是关于SQL Server 2014 - 选择具有两个条件的语句的主要内容,如果未能解决你的问题,请参考以下文章

使用具有中等数据的表提高 SQL Server 查询性能

如何在 SQL Server 中更新具有数百万行的大表?

具有多个或条件的sql server外连接

SQL Server 2014 - MainTable 和 TempTable - 如果不存在则插入其他更新

选择 SQL Server 中排名第二的行

SQL Server存储过程选择,存在,多表