如何在mysql中找到最后一个用户?

问题描述

我有2个表“用户”和“订单”。

用户

Private Sub Form_Current()

TempVars!CurrentItemNumber.Value = [ItemNumber].Value

Dim ctrl As control
For Each ctrl In Me.Controls

If ctrl.Name = "OptionLabel1" Then

    If DLookup("[SecLevel]","Switchboard Items",TempVars!CurrentItemNumber.Value) = "Admin" Then
        
        Me.OptionLabel1.ForeColor = RGB(255,0)
    
    ElseIf DLookup("[SecLevel]",TempVars!CurrentItemNumber.Value) = "Operator" Then
        Me.OptionLabel1.ForeColor = RGB(0,255)
    
    Else
    
        Me.OptionLabel1.ForeColor = RGB(0,0)
    End If
End If
Next
End Sub

订单:

userid   apartment_id   blockid  flat_id
1002             2           3       101
1004             1           4       102 
1005             2           3       101

现在我想要以下内容

orderid   userid   order_date
10         1002    2020-07-11
11         1004    2020-08-13  
12         1005    2020-09-11

我已经编写了用于查找除“ last_order_user_id”之外的所有这些内容sql。有人可以帮我吗?这是我到目前为止所拥有的:

apartment_id    blockid    flat_id   no_of_users  last_order_date   last_order_user_id
    2              3         101        2            2020-09-11          1005

我尝试将o.userid添加到select语句的字段列表中,但是由于orders表是由order_date按升序排序的,因此它返回第一个已排序的用户ID。

任何建议都会很有帮助。

解决方法

您需要计算每个公寓/街区/公寓组合的最大订购日期;然后您可以将其重新连接到订单和用户表,以查找下一个订单的用户:

SELECT u.apartment_id,u.blockid,u.flat_id,m.no_of_users,m.last_order_date,u.user_id AS last_order_user_id
FROM users u 
JOIN orders o ON u.user_id = o.user_id
JOIN (
  SELECT apartment_id,blockid,flat_id,COUNT(DISTINCT u.user_id) AS no_of_users,MAX(o.order_date) AS last_order_date
  FROM users u
  JOIN orders o ON u.user_id = o.user_id
  GROUP BY apartment_id,flat_id
) m ON m.apartment_id = u.apartment_id
   AND m.blockid = u.blockid
   AND m.flat_id = u.flat_id
   AND m.last_order_date = o.order_date

输出:

apartment_id    blockid     flat_id     no_of_users     last_order_date     last_order_user_id
1               4           102         1               2020-08-13          1004
2               3           101         2               2020-09-11          1005

Demo on SQLFiddle