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);

これは最大の結果を 1 つだけ返します。結果を ID ASC で並べ替え、結果を最大 4 つに制限できたとしても、個別の doc_types が返されるとは限りません。また、DB 内のドキュメント タイプの数が 4 から変更されている可能性があり、その数をカウントする必要があります。

select * from template_table 
order by id limit 4;

助けてくれてありがとう。

4

2 に答える 2

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 に答える