gpt4 book ai didi

MySQL:从最近的组中获取最旧的记录

转载 作者:行者123 更新时间:2023-11-29 00:04:24 25 4
gpt4 key购买 nike

对于令人困惑的标题,我们深表歉意,但这是解释它的最佳方式。这不是常见的“最近来自组”的问题,我在网上找不到任何类似的问题。

我有一个状态表,用于跟踪人们在不同工作地点所做的事情。它包含链接人物、状态和位置的记录。

ID, start_date, person_ID, location_ID, status
1, 2014-10-12, 1, 1, job a
2, 2014-10-13, 2, 2, job b
3, 2014-10-15, 1, 3, job c
4, 2014-10-21, 1, 3, job d
5, 2014-10-22, 2, 4, job a
6, 2014-10-26, 2, 2, job d

我需要能够确定每个人在当前站点停留了多长时间 - 我希望得到这样的结果:

person_ID, location_ID, since
1, 3, 2014-10-15
2, 2, 2014-10-26

通过加入 max(start_date),获取他们开始当前工作的时间相对容易,但我需要从最近位置完成的工作中获取 min(start_date)。

我一直在尝试将 min(start_date) 添加到与当前位置匹配的记录中(从最近的记录开始),并且在我有一个人(比如人 2)多次访问当前位置...您可以在我想要的结果中看到我想要 10-26 日,而不是 10-13 日,这是他们第一次访问该站点。

我需要一些方法来匹配给定人员的工作记录,然后迭代返回直到位置不匹配。我想必须有一些方法可以通过一些子查询和一些巧妙的连接来做到这一点,但我还没有找到它,所以我会很感激一些帮助。

最佳答案

如果我正确理解您的问题,您可以使用 EXISTS 消除除每个人最近的位置之外的所有位置,并从结果行中获取最小日期。

SELECT person_id, location_id, MIN(start_date) since
FROM status s
WHERE NOT EXISTS (
SELECT 1 FROM status
WHERE s.person_id = person_id
AND s.location_id <> location_id
AND s.start_date < start_date)
GROUP BY person_id

An SQLfiddle to test with .

基本上,它消除了同一个人最近访问过另一个位置的所有位置和时间。例如;

1,  2014-10-12, 1,         1,           job a

...因为人 1 最近访问了位置 3 而被淘汰;

3,  2014-10-15, 1,         3,           job c

...保留,因为同一个人最近才访问过同一地点。

然后它只选择每个人最近最少的时间。由于仅保留最后一个位置的行,因此它将是距最近位置最近最少的时间。

关于MySQL:从最近的组中获取最旧的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28206985/

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