有任何更好的解決方案得到這些多(有時會只有一行,有時 - 倍數)不子查詢與最小amount
值的行?如果沒有更好的解決方案,那很好,只是有點傷心。 :)更好地選擇其中Max
我的第一個解決方案是這樣的(我不喜歡子查詢)
SELECT * FROM transactions
WHERE wallet_id = 148
AND amount = (SELECT MIN(amount) FROM transactions WHERE wallet_id = 148)
有任何更好的解決方案得到這些多(有時會只有一行,有時 - 倍數)不子查詢與最小amount
值的行?如果沒有更好的解決方案,那很好,只是有點傷心。 :)更好地選擇其中Max
我的第一個解決方案是這樣的(我不喜歡子查詢)
SELECT * FROM transactions
WHERE wallet_id = 148
AND amount = (SELECT MIN(amount) FROM transactions WHERE wallet_id = 148)
的一般查詢,找到每個錢包其最低金額:
SELECT t1.*
FROM transactions t1
JOIN (SELECT wallet_id, MIN(amount) minamount
FROM transactions GROUP BY wallet_id) t2
on t1.wallet_id = t2.wallet_id and t1.amount = t2.minamount
WHERE t1.wallet_id = 148 -- keep or remove this line
這看起來很整齊,你仍然存在一個子查詢:) – Rozkalns
這是「它的」。只是說';-) – Strawberry
@Strawberry,謝謝。我傾向於一遍又一遍地犯這個錯誤... – jarlh
有時稱爲「不包括JOI N「(在這裏,它也是一個」自我連接「,因爲我們使用表來加入自己)。連接的條件要求t1.amount大於t2.amount,然後通過where子句找到沒有匹配的行,因此我們有最低的t1.amount值。
SELECT
t1.*
FROM transactions t1
LEFT JOIN transactions t2 ON t1.wallet_id = t2.wallet_id AND t1.amount > t2.amount
WHERE t1.wallet_id = 148 AND t2.wallet_id IS NULL
見:http://data.stackexchange.com/stackoverflow/query/556758/left-excluding-self-join
NB的圖:我不主張這是好還是 「正確」;只是它是一種替代
好消息是有一個更好的解決方案。閱讀[這個答案](http://stackoverflow.com/a/28090544/4265352)瞭解詳情。壞消息是我沒有心情應用在那裏發佈的技術來爲您的案例生成查詢。你必須自己動手:-) – axiac
稍後我會做更多的測試,我只能在這裏訪問一個Sybase,它似乎並沒有在這裏被接受...... – AxelH