gpt4 book ai didi

mysql - 获取每个人的最新N个结果

转载 作者:行者123 更新时间:2023-11-30 23:01:04 25 4
gpt4 key购买 nike

我正在尝试为我的表构建一个个性化查询,其中包括为每个人获取最新的 N 条记录。我的表架构如下:

+-----------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| person | varchar(100) | NO | PRI | NULL | |
| time | bigint(20) unsigned | NO | PRI | NULL | |
+-----------+---------------------+------+-----+---------+-------+

例如,如果我有以下数据:

+---------+-------+
| person | time |
+---------+-------+
| A | 2 |
| A | 7 |
| B | 1 |
| B | 6 |
| B | 4 |
| C | 3 |
+---------+-------+

和我的N = 2,预期的结果是:

+---------+-------+
| person | time |
+---------+-------+
| A | 7 |
| A | 2 |
| B | 6 |
| B | 4 |
| C | 3 |
+---------+-------+

(每人最后2个结果,按人升序,时间降序)

我知道我可以先获取所有的人名,然后一个一个地选择/排序/限制他们,但我很想知道我是否可以在一个查询中做到这一点,然后让 DBMS 完成艰苦的工作。对于 N = 1,我成功地使用了 max 和 group by 语句:

SELECT person, max(time) as time FROM table GROUP BY person ORDER BY person ASC, time DESC

但我不知道如何扩展它以获得更大的 N 值。你能帮我吗?

最佳答案

好的,我使用@Rudie 链接找到了解决方案:

select * from (
select a.* from points as a
left join points as a2
on a.person= a2.person and a.time <= a2.time
group by person, time
having count(*) <= 2) a
order by person asc, time desc;

实例:http://sqlfiddle.com/#!2/58026/2

它运行良好。感谢大家的贡献!

关于mysql - 获取每个人的最新N个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com