带两个连续符的select语句

a0zr77ik  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(326)

这里的交易:我有一个表,其中有一个路径列和另一个日期列。因为我是sql世界的新手,所以我不确定什么语句更适合这个问题。它必须给我:
如果date为空,则路径列的值或;
如果date不为null,则为在其date列中具有最新日期值的path列的值。
需要注意的是,表最后不能有任何重复的路径。
表当前的外观示例:

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。祝您有个美好的一天!

ozxc1zmp

ozxc1zmp1#

使用 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;
``` `NULL` s被认为是最小的值,所以降序排序将它们放在最后。
uemypmqf

uemypmqf2#

你可以用 Group By clause:-

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

有关演示数据,请访问此链接

相关问题