首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从聚合表和有序表中查询行,但跳过每个组的最后两行

如何从聚合表和有序表中查询行,但跳过每个组的最后两行
EN

Stack Overflow用户
提问于 2016-05-06 12:57:40
回答 1查看 41关注 0票数 0

我有以下汇总表:

代码语言:javascript
复制
aid | created    | vid | md5   | an |
-------------------------------------
1   | 2014-05-01 | 1   | <md5> | a  |
2   | 2014-05-01 | 2   | <md5> | s  |
2   | 2014-05-06 | 3   | <md5> | a  |
1   | 2014-05-09 | 4   | <md5> | d  |
1   | 2014-05-09 | 5   | <md5> | g  |
3   | 2014-06-01 | 6   | <md5> | a  |
4   | 2014-06-02 | 7   | <md5> | d  |
4   | 2014-06-02 | 8   | <md5> | s  |
4   | 2014-06-03 | 9   | <md5> | s  |
1   | 2014-06-06 | 10  | <md5> | s  |

资料来源表:

代码语言:javascript
复制
Table name: a
---------------------
aid - INT PK NN UN AI
pn - CHAR(1) NN
...

Table name: v
----------------------
vid - INT PK NN UN AI
aid - NN
created - TIMESTAMP NN (INDEXED)
md5 - CHAR(32) NN (INDEXED)
...

我需要创建一个MySql查询(MariaDB),它通过aid, created DESC, vid DESC命令列表,并跳过每个aid的最后两行。

因此,结果将是:

代码语言:javascript
复制
aid | created    | vid | md5
------------------------------
1   | 2014-05-01 | 1  | <md5>
1   | 2014-05-09 | 4   | <md5>
4   | 2014-06-02 | 7   | <md5>

我的第一个想法是在IN (.)内使用限制。但我收到了一条“不支持”错误消息。然后,我尝试使用罗姆()技巧,但我总是得到一个错误的顺序(我相信,因为索引)。现在我没有任何想法了。任何帮助都将不胜感激!

SQL for:

代码语言:javascript
复制
SELECT
    v2.*,
    @rownum:=CASE WHEN @aid=aid THEN @rownum+1 ELSE 1 END AS vorder,
    @appid:=aid AS aid
FROM (
    SELECT aid, created, vid, md5 FROM v ORDER BY aid, created DESC, vid DESC
) AS v2
EN

回答 1

Stack Overflow用户

发布于 2016-05-06 14:15:17

嗨,木瓜,

代码语言:javascript
复制
select * from v a where 
(select count(*) from v b where a.aid = b.aid and a.vid >= b.vid) > 2
order by aid, created desc, vid desc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37073056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档