![](/img/trans.png)
[英]Select top N rows, first max row from each group distinct by one column (Spring,Hibernate,JPQL)
[英]Select rows where top n values of a certain column are distinct
我想知道是否有可能以一种简单有效的方式在 MySQL 中做到这一点。 我想在我的例子中做的是:
我有一个表,我在其中存储带有 FK 的博客文本到其他博客信息(标题、用户等)。 博客文本可以存储在多行(如果它是一个非常长的文本)。 如果有多行,每一行都有一个序列号来知道文本的顺序。
有什么简单的方法可以让我通过一个查询选择从最高 FK 编号 (postid)(也将是最新添加的)开始的行,并将响应的限制设置为 10 个不同的 FK 值。 需要明确的是,我不想将行数限制设置为 10,而只想将不同 postid 值的限制设置为。
例如,如果我有下表:
+----------+--------+-----------+
| sequence | postid | text |
+----------+--------+-----------+
| 1 | 50 | 'Bla bla' |
| 1 | 51 | 'Bla bla' |
| 1 | 52 | 'Bla bla' | (1) <-- From here (52 to 61 is 10 different postids)
| 2 | 52 | 'Bla bla' | (2)
| 1 | 53 | 'Bla bla' | (3)
| 2 | 53 | 'Bla bla' | (4)
| 1 | 54 | 'Bla bla' | (5)
| 1 | 54 | 'Bla bla' | (6)
| 1 | 56 | 'Bla bla' | (7)
| 1 | 57 | 'Bla bla' | (8)
| 1 | 58 | 'Bla bla' | (9)
| 1 | 59 | 'Bla bla' | (10)
| 1 | 60 | 'Bla bla' | (11)
| 1 | 61 | 'Bla bla' | (12) <-- To here
+----------+--------+-----------+
这里我想要底部 12 行,因为它们的 postid 从 61 到 52(包括 52),即 10。括号中的数字只是为了说明我想选择多少行。
我希望这不会太令人困惑:) 那么有没有简单有效的方法来做到这一点?
SELECT *
FROM mytable a
INNER JOIN ( SELECT DISTINCT(postid) postid
FROM mytable
ORDER BY postid DESC LIMIT 10) b
ON a.postid = b.postid
在以下查询中,I INNER JOIN
您的主表到一个临时表,该表获得(最多)10 个最高postid
值。 这允许您仅保留原始表中具有 10 个最高postid
值之一的记录。 您不想要的记录将被过滤掉,因为它们不会与临时表中的任何内容匹配。
SELECT t1.sequence, t1.postid, t1.text
FROM table t1 INNER JOIN
(
SELECT DISTINCT postid
FROM table
ORDER BY postid DESC
LIMIT 10
) t2
ON t1.postid = t2.postid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.