我有一个MySQL数据库,里面有一个person
表,在这里我存储用户的个人详细信息。每个用户都属于一个组,所以我有另一个member_group
表,在这里我存储他们的用户ID和他们的组ID,沿着他们的in_group_begin
日期和(最终)他们的in_group_end
日期。
当用户在一个组中时,in_group_end值为null。当他们离开该组时,它会填充离开日期。然后他们可能永远离开,或者只是移动到另一个组,需要在member_group
表中添加新行。
- 因此,刚刚加入的TOM可能在
member_group
表中有一条记录,其中in_group_end
值为NULL。 - DICK可能已经存在了一段时间,并且在
member_group
表中有四条记录,除了最近的记录之外,所有记录中都填充了in_group_end
的值。 - HARRY已经离开了-他是
member_group
表中的两条记录,所有记录的值都填充在in_group_end
列中。
现在我希望查询person表并返回一个用户列表,如果是当前用户,则返回当前组ID,如果是过去的用户,则返回他们所在的最后一个组ID。
我假设这可以在子查询中解决,但我不确定如何排序(例如ORDER BY (in_group_end = NULL) DESC, in_group_end DESC
),然后还有GROUP BY,无论如何都会提前执行。member_group
表有一个自动递增的tbl_id
字段,所以可能是MAX(tbl_id)
上的某种进一步连接或其他东西?
这个查询是什么样子的?任何帮助都很感激。
1条答案
按热度按时间cwtwac6a1#
你可以使用
FIRST_VALUE()
窗口函数:如果你想要所有用户的详细信息:
如果你还想要最后一个
in_group_end
值,使用ROW_NUMBER()窗口函数会更容易: