[英]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.