[英]Select value from only the first record in a group
我有一个包含交易记录的数据库。 每个记录都属于一个交易链,并且每个交易都有一个共享的TCID(交易链ID)。 每个交易都包含一个发送者和一个接收者。 我需要做的是检查一个链中的最终接收用户是否与另一个链中的第一个发送者相同。
目前,我的MySQL查询返回的记录是最终接收者在另一个链的任何事务中的位置,而不仅仅是第一个。 我需要将此严格限制为最终接收者和第一个发送者。
我尝试使用分组依据,排序依据和限制1,但在查询找到一些记录后才应用它们。 这是我到目前为止尝试过的查询:
SELECT TCID FROM transactions WHERE senderUID = '$receiverUID' GROUP BY TCID LIMIT 1
有人知道我只能搜索组(TCID)中第一个(最低TID)记录的senderUID的方法吗?
谢谢你的帮助!
这有望使您朝正确的方向前进-
//Gets rows where senderUID is the first (lowest TID) record in group
SELECT a.*
FROM test a
WHERE a.senderUID = '$receiverUID'
AND NOT EXISTS (select * from test where TCID = a.TCID and id < a.id and senderUID != '$receiverUID')
GROUP BY TCID
UNION
//Gets rows where senderUID is the same as the last receiverUID of TCID
SELECT b.*
FROM test b
WHERE b.receiverUID = '$receiverUID'
AND NOT EXISTS (select * from test where TCID = b.TCID and id > b.id and receiverUID != '$receiverUID')
GROUP BY TCID
因此,作为一个简单的示例,我有下表:
因此,如果我设置$ receiverUID = 1,则会得到2行,其中senderUID是TCID组(1,9)中的第一个,而3行则是senderUID是TCID组(4,7,8)中的ReceiverUID。
如果只想获得1行,其中senderUID是TCID组中的第一个(1)/(4,7,8),则可以添加LIMIT 1
SELECT a.*
FROM test a
WHERE a.senderUID = '$receiverUID'
AND NOT EXISTS (select * from test where TCID = a.TCID and id < a.id and senderUID != '$receiverUID')
GROUP BY TCID LIMIT 1
如果我将$ receiverUID设置为2(3,11)/(6,10)
并具有LIMIT 1
(3)/(6,10)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.