Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于检索非重复行的SQL查询_Java_Mysql_Sql_Sql Server_Postgresql - Fatal编程技术网

Java 用于检索非重复行的SQL查询

Java 用于检索非重复行的SQL查询,java,mysql,sql,sql-server,postgresql,Java,Mysql,Sql,Sql Server,Postgresql,我有一个表文档(id,用户id,唯一文档id,版本,日期) 例如: (1, 1, 1001, 1, null), (1, 1, 1001, 2, null), (1, 2, 1002, 1, null) 目前,我有一个选择并显示详细信息的查询: select d.* from documents d where d.user_id = 1 order by d.date desc limit 10 offset 0 但是我希望使用unique\u document\u id和具有max(v

我有一个表
文档
id
用户id
唯一文档id
版本
日期

例如:

(1, 1, 1001, 1, null),
(1, 1, 1001, 2, null),
(1, 2, 1002, 1, null)
目前,我有一个选择并显示详细信息的查询:

select d.* from documents d
where d.user_id = 1 
order by d.date desc
limit 10
offset 0
但是我希望使用
unique\u document\u id
具有max(version)
的非重复行

输出应该是这样的:
(1,1,1001,2,null)
(1,2,1002,1,null)

我可以通过修改查询来实现这一点,还是需要在其他地方处理? 使用
group by unique\u document\u id和max(version)

尝试以下方法

select d.* from documents d
INNER JOIN (
SELECT Unique_document_id, MAX(version) version
from documents
GROUP BY Unique_document_id) b ON a.Unique_document_id= b.Unique_document_id  
AND a.version = b.version

如果您使用的是sql server而不是postgresql,则窗口函数将有助于:

With orderedVersions As (
    Select id, user_id, unique_document_id, Version, [date], RowNo = Row_Number() Over (Partition By Unique_Document_id Order By Version desc)
      From documents)
Select id, user_id, unique_document_id, Version, [date]
  From orderedVersions
  Where RowNo = 1;
因此,可以通过修改查询来实现。 如果表很大,那么您也可以通过创建索引来考虑性能调整,但是这个查询应该让您开始。

尝试这个,(为MySQL工作)


是的,
groupby
max(version)
确实是一条路。您需要按所有未聚合的字段进行分组。首先,找出您正在使用的RDBMS。如果您使用的是SQL Server,则可以使用ROW_NUMBER()分析函数来实现这一点。感谢您的帮助。您对此答案有何异议?我不小心单击了两次。
select a.* from doc_table a 
where (a.user_id, a.Unique_document_id, a.version) in
(select d.user_id, d.Unique_document_id, max(d.version)
from doc_table d group by d.user_id, d.Unique_document_id)