Java 数据库中的唯一行

Java 数据库中的唯一行,java,sql,sql-server,Java,Sql,Sql Server,我有一张包含大量数据的表格。我正在存储的日志详细信息,其中sentTime和三个字段的组合(COL1、COL2、COL3)是唯一的 我需要在每次休息通话中接听最后一个电话 例如,如果分别调用API1、API2和API3 10次,则表中大约有30行。我需要所有3个API的最后调用,所以我将得到3行,每个API一行 我使用以下查询: SELECT tb.id FROM Table1 (nolock) tb INNER JOIN ( SELECT col1, col2, col3, MAX(

我有一张包含大量数据的表格。我正在存储的日志详细信息,其中
sentTime
和三个字段的组合(COL1、COL2、COL3)是唯一的

我需要在每次休息通话中接听最后一个电话

例如,如果分别调用API1、API2和API3 10次,则表中大约有30行。我需要所有3个API的最后调用,所以我将得到3行,每个API一行

我使用以下查询:

SELECT tb.id
FROM Table1 (nolock) tb 
INNER JOIN (
    SELECT col1, col2, col3, MAX(sentTime) as lastSentTime 
    FROM Table1 (nolock) GROUP BY col1, col2, col3) a 
        ON a.col1 = tb.col1 AND 
           a.col2 = tb.col2 AND 
           a.col2 = tb.col2 AND 
           a.lastSentTime = tb.sentTime 
但它并没有像预期的那样起作用

例如:

id  Name    Sent_Time      Temp_id  Temp_id2
1   Delete  04/03/16 17:54  AB      2222701
2   Update  04/03/16 17:54  UD      6900001
3   Create  04/03/16 17:54  EL      2017301
4   Read    04/03/16 17:54  AB      2670001
5   Update  08/03/16 17:54  UD      1069501
6   Create  08/03/16 17:54  EL      3490801
除了有数百万行。 名称、临时id和临时id2的组合是唯一的


在java中,我获取了所有数据,并将其放入一个HashMap中,其键为
name+Temp\u id+Temp\u id2
。所以它是独一无二的。我是否可以通过查询获得相同的数据

你可以试试这个。我猜每个不同的REST调用都有自己的值
col1
col2
col3
,您需要最新的值

SELECT MAX(sentTime) mostrecent_sentTime,
       col1, col2, col3
  FROM Table1
 GROUP BY col1, col2, col3

如果需要行中的所有列,请使用窗口函数:

select t.*
from (select t.*,
             row_number() over (partition by col1, col2, col3 order by sentTime desc) as seqnum
      from t
     ) t
where seqnum = 1;

如果您的表只有四列(或者您只关心四列),那么@OllieJones建议的聚合可能更合理。

当您编写上次调用时,您是指最近的调用吗?如何区分来自不同REST调用的行?请添加一些示例数据和预期结果;)。请看-不建议在任何地方都使用此选项-恰恰相反!奥利琼斯:名字、临时工id和临时工id是唯一的。shA.t:我已添加id名称发送时间临时id临时id2 1删除04/03/16 17:54 AB 2222701 2更新04/03/16 17:54 UD 6900001 3创建04/03/16 17:54 EL 2017301 4读取04/03/16 17:54 AB 2670001 5更新08/03/16 17:54 UD 1069501 6创建08/03/16 17:54 EL 3490801感谢回复。它不起作用。我们可以说col1,col2,col3的组合是唯一的。我把所有的数据都用哈希映射作为键col1,col2,col3。我获得了与每个api(col1、col2、col3)相关的所有最新数据。我可以用查询做同样的事情吗。