我有以下汇总表:
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 |资料来源表:
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的最后两行。
因此,结果将是:
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:
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发布于 2016-05-06 14:15:17
嗨,木瓜,
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 deschttps://stackoverflow.com/questions/37073056
复制相似问题