有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用IN子句编写SQL查询以获取第一条记录(最新记录)?

我有一个excel文件,其中包含一些数据(id),这些id在数据库中有多条记录。我有大约400个id,我需要获得每个id的最新记录。我不想一个接一个地做。我试着用IN子句,但没用

Select *
from myTable with (nolock)
where submission_number IN ('02597', '69875')
order by timestame DESC;

上面的查询不符合我的要求。能给我一些帮助/指导吗

谢谢


共 (2) 个答案

  1. # 1 楼答案

    你可以使用row_number来实现:

    select * 
    from (
        select *, row_number() over (partition by submission_number order by timestame desc) rn
        from yourtable
    ) t
    where rn = 1
    

    这将为每个submission_number返回一条记录。如果只需要in子句中的2,可以将其添加回where条件

  2. # 2 楼答案

    我会使用apply来实现这一点:

    select t.*
    from (values ('02597'), ('69875')) v(submission_number) cross apply
         (select top (1) t.*
          from mytable t
          where t.submission_number = v.submission_number
          order by t.timestamp desc
         ) t;
    

    一个很好的特性是,您可以使用outer apply,它将在结果集中返回一行,即使您的表中没有匹配项

    另一种不使用子查询的方法是

    select top (1) with ties t.*
    from myTable t
    where submission_number in ('02597', '69875')
    order by row_number() over (partition by submission_number order by timestame desc);