我需要显示表中的最后2个结果(结果),结果由具有匹配submissionId的多行组成,每次提交的行数未知,当然我更喜欢单个查询。
这是数据库表结构
submissionId input value
1 name jay
1 phone 123-4567
1 email <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="601405131420070d01090c4e030f0d" rel="noreferrer noopener nofollow">[email protected]</a>
2 name mo
2 age 32
3 name abe
3 email <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7716151237101a161e1b5914181a" rel="noreferrer noopener nofollow">[email protected]</a>
4 name jack
4 phone 123-4567
4 email <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="573d36343c17303a363e3b7934383a" rel="noreferrer noopener nofollow">[email protected]</a>
期望的结果:
submissionId input value
3 name abe
3 email <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="18797a7d587f75797174367b7775" rel="noreferrer noopener nofollow">[email protected]</a>
4 name jack
4 phone 123-4567
4 email <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7e141f1d153e19131f1712501d1113" rel="noreferrer noopener nofollow">[email protected]</a>
或者更好,如果我可以像这样组合行:
3 name abe 3 email <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1c7d7e795c7b717d7570327f7371" rel="noreferrer noopener nofollow">[email protected]</a>
4 name jack 4 phone 123-4567 4 email <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6c060d0f072c0b010d0500420f0301" rel="noreferrer noopener nofollow">[email protected]</a>
最佳答案
这里的一个选项是使用子查询来识别最新的和紧邻最新的 submissionId
:
SELECT submissionId, input, value
FROM yourTable
WHERE submissionId >= (SELECT MAX(submissionId) FROM yourTable) - 1
ORDER BY submissionId
此处演示:
SQLFiddle
更新:
如果您的 submissionId
列确实是日期类型,并且您想要结果集中最近的两个日期,那么以下查询将实现这一点。请注意,WHERE
子句中的子查询虽然丑陋,但与外部查询并不相关。这意味着 MySQL 优化器应该能够确定它只需要运行一次。
SELECT submissionDate, input, value
FROM yourTable
WHERE submissionDate >=
(SELECT MAX(CASE WHEN submissionDate = (SELECT MAX(submissionDate) FROM yourTable)
THEN '1000-01-01'
ELSE submissionDate
END) FROM yourTable)
ORDER BY submissionDate
SQLFiddle
关于MySQL 根据 DISTINCT 值对多行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38377612/