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)相关的所有最新数据。我可以用查询做同样的事情吗。