0

我的表存储了几个文档的各种版本。

-------------------------------
| id   | doc_type |  download | 
-------------------------------
|  1   |   type1  |  file     |
-------------------------------
|  2   |   type2  |  file     |
-------------------------------
|  3   |   type3  |  file     |
-------------------------------
|  4   |   type1  |  file     |
-------------------------------

该表存储同一类型文档的不同版本。我需要构建一个查询,它将返回具有 max(id) 的不同类型的 doc_type - 这是文件的最新版本。doc_types 的数量不受限制并且是动态的。到目前为止我的查询:

select max(id) from template_table 
where doc_type in (select distinct doct_type from template_table);

这仅返回一个最大的结果。如果我可以按 id ASC 对结果进行排序,并将结果限制为最大 4,但它不能保证它会返回不同的 doc_types。数据库中文档类型的数量也可能从 4 变化,它需要计算有多少。

select * from template_table 
order by id limit 4;

谢谢你的帮助。

4

2 回答 2

1

您可以使用 GROUP BY 来获得所需的结果

select 
   doc_type
,  max(id)                                                AS last_id
,  max(download) KEEP (DENSE_RANK FIRST order by id desc) AS last_download
from template_table
group by doc_type
;
于 2013-08-28T10:14:38.337 回答
1

询问:

SELECT t1.id,
       t1.doc_type,
       t1.download
FROM   template_table t1
 JOIN (SELECT MAX(id) AS id,
              doc_typ
       FROM template_table
       GROUP BY doc_type) t2
  ON t2.doc_type = t1.doc_type
  AND t2.id = t1.id

或者:

SELECT t1.id,
       t1.doc_type,
       t1.download
FROM   template_table t1
WHERE t1.id = (SELECT MAX(t2.id)
               FROM template_table t2
               WHERE t2.doc_type = t1.doc_type)
于 2013-08-28T10:23:06.280 回答