当前位置: 首页 > 知识库问答 >
问题:

如何查询具有两个不同列的MAX子查询的最小值?

卜存
2023-03-14

我有一张这样的桌子:

+---------------+--------------+------+-----+----------+
| Field         | Type         | Null | Key | Default  |
+---------------+--------------+------+-----+----------+
| id            | smallint(6)  | NO   | PRI | NULL     |
| Book          | tinyint(4)   | NO   |     | NULL     |
| Chapter       | smallint(6)  | NO   |     | NULL     |
| Paragraph     | smallint(6)  | NO   |     | NULL     |
| Text          | text         | YES  |     | NULL     |
| RevisionNum   | mediumint(9) | NO   | PRI | NULL     |
+---------------+--------------+------+-----+----------+

MySQL>按id限制11从MyTable顺序中选择id、书籍、章节、段落、RevisionNum;

+-----+------+---------+-----------+-------------+
| id  | Book | Chapter | Paragraph | RevisionNum |
+-----+------+---------+-----------+-------------+
|   1 |    1 |       1 |         1 |           0 |
|   1 |    1 |       1 |         1 |           1 |
|   1 |    1 |       1 |         1 |           2 |
|   2 |    1 |       2 |         2 |           0 |
|   2 |    1 |       2 |         2 |           1 |
|   2 |    1 |       2 |         2 |           2 |
|   2 |    1 |       2 |         2 |           3 |
|   3 |    1 |       2 |         3 |           0 |
|   4 |    1 |       2 |         4 |           0 |
|   4 |    1 |       2 |         4 |           1 |
|   5 |    1 |       3 |         5 |           0 |
+-----+------+---------+-----------+-------------+

要找到没有未修改段落的书籍或章节,我希望查询该章节或书籍的所有不同id的最大值的最小值,或者以某种方式确定没有id保持未编辑(MAX(RevisionNum)为零)。

我的大多数约会尝试都以这样的错误告终:

SELECT DISTINCT Book,RecordNum FROM MyTable
    -> WHERE 0 < ALL (SELECT DISTINCT RecordNum,MAX(RevisionNum) 
                      FROM MyTable 
                      WHERE MAX(RevisionNum) > 0);
                      
ERROR 1111 (HY000): Invalid use of group function

...而我根本就没有使用“group by”函数!

下面的查询生成结果,但只是给出了所有ID,实际上并不按照请求显示唯一的账本记录集。怎么会这样?

按id限制5从MyTable组中选择DISTINCT Book,id,MAX(RevisionNum);

+------+----+------------------+
| Book | id | MAX(RevisionNum) |
+------+----+------------------+
|    1 |  1 |               30 |
|    1 |  2 |               16 |
|    1 |  3 |               15 |
|    1 |  4 |               10 |
|    1 |  5 |                9 |
+------+----+------------------+

正确的查询是什么,才能给出更像这样的结果:

+------+-----+-----------------------+
| Book |  id | MIN(MAX(RevisionNum)) |
+------+-----+-----------------------+
|    1 |   5 |                     3 |
|    2 |  17 |                     1 |
|    3 |  33 |                     2 |
|    4 | 147 |                     0 |
|    5 | 225 |                     2 |
+------+-----+-----------------------+

共有1个答案

荣波
2023-03-14

你在寻找两个层次的聚合吗?

select id, book, min(max_revisionnum)
from (select id, book, chapter, paragraph, max(revisionnum) as max_revisionnum
      from mytable
      group by id, book, chapter, paragraph
     ) t
group by id, book;

编辑:

根据您的评论,您可以使用:

select *
from (select id, book, chapter, paragraph, max(revisionnum) as max_revisionnum,
             row_number() over (partition by book order by max(revisionnum) desc) as seqnum
      from mytable
      group by id, book, chapter, paragraph
     ) t
where seqnum = 1;

这是一个dB<>小提琴。

 类似资料:
  • 我有一个表“Quote”,映射在hibernate中,它有一个由整数id和日期组成的复合键,还有几个附加列。我想编写一个条件查询,它使用DetachedCriteria来获取每个id中日期最长的行。 在sql中,我可能会编写一个查询,比如 在hibernate中,我认为可以像这样为“group by”子查询创建DetachedCriteria(其中Quote是映射表的类,“Qid”是键的复合id类

  • 问题内容: 怪物编辑:查询现在将运行,但返回错误答案。添加了一个粗略的架构。PatientID不是tblPatientVisits表中的主键,因为同一患者ID可以出现多次。 列出了每个县名,但每个计数(s.countyName)和计数(t.countyname)为1 编辑:我有一个查询,现在运行,但它返回 问题答案: 没有样本数据和理想的结果很难说,但是也许这是您要追求的?

  • 我得到了一个表从SELECT查询1如下从SQL服务器: 我从SQL Server的SELECT query 2中获得了一个表,如下所示: 我想将这些SELECT查询加入到一个SELECT查询中,如下所示: 我试着这样: 但它不起作用,这不是我想要加入的实际表。 基本上,我想连接两个具有相同列名但它们之间没有公共值的SELECT查询。我想使用连接表中的SELECT查询。 提前谢谢你。

  • 我们可以创建相同的GET URI但使用不同的查询参数吗? 例如,我有两个REST GET URI: 现在REST服务没有将两个GET方法识别为单独的,并且只将其视为声明为第一个的1 GET方法。 为什么会这样 如果您能引用任何资源,我们将不胜感激。

  • 我有桌子: 行程:Trip_Num、Trip_Type等 用户的出差历史记录:Username、Trip_Num等 我正在用php做一个项目,需要为一个特定的用户(通过他的用户名)做一个SQL查询--需要知道用户的Trips历史表中Trip_Num的Trip_Type。 附上我的表格: 更新:我需要计算trip_type中的每个值。我的意思是我想看到“步行”-4次,“自行车”-3次,这很好?...

  • 问题内容: 在将其标记为重复之前,请先看一下此SQLFiddle。 我有这个架构: 子查询: 结果: 现在,这里最棘手的部分是此查询的结果: 这是: 应该是这样的: 您认为查询中有什么问题? 问题答案: 而不是您可以简单地使用相同。也可以改用。 输出: 看到这个SQLFiddle 编辑: 如果要使用它,则必须使用如下子查询: 看到这个SQLFiddle 编辑2: 除了在外部查询中使用之外,您也可以