[英]Using SQL to get distinct rows, but also the whole row for those
好的,所以舉個例子更容易,希望有些人有解決方案:
我有一個持有投標的表格:
ID | companyID | userID | contractID | bidAmount | dateAdded
下面是可能在表中的一組示例行:
ID | companyID | userID | contractID | bidAmount | dateAdded
--------------------------------------------------------------
10 | 2 | 1 | 94 | 1.50 | 1309933407
9 | 2 | 1 | 95 | 1.99 | 1309933397
8 | 2 | 1 | 96 | 1.99 | 1309933394
11 | 103 | 1210 | 96 | 1.98 | 1309947237
12 | 2 | 1 | 96 | 1.97 | 1309947252
好的,所以我想做的是能夠獲得所有信息(例如通過在正常的 select 語句中使用 *)每個唯一合同 ID 的最低出價。
所以我需要以下行:
ID = 10 (for contractID = 94)
ID = 9 (for contractID - 95)
ID = 12 (for contractID = 96)
我想忽略所有其他人。 我考慮過使用 DISTINCT,但我無法讓它返回所有列,只有我用於不同的列。
有沒有人有什么建議?
謝謝,傑夫
select *
from mytable main
where bidAmount = (
select min(bidAmount)
from mytable
where contractID = main.contractID)
請注意,如果有多個記錄共享相同的最低出價,這將返回多行。
沒有測試它,但是這個查詢應該是可能的,盡管它可能不是很快:
SELECT * FROM bids WHERE ID IN (
SELECT ID FROM bids GROUP BY contractID ORDER BY MIN(bidAmount) ASC
)
這將是 MySQL 的查詢,也許您需要為另一個數據庫調整它。
您可以使用子查詢來查找每個 contractid 的最低 rowid:
select *
from YourTable
where id in
(
select min(id)
from YourTable
group by
ContractID
)
問題是 distinct 不返回特定的行 - 它返回不同的值,(根據定義)可能出現在多行上。
子查詢是您的答案,而上述建議中的某處可能就是答案。 您的子查詢需要返回 ID 或具有最低出價值的行。 然后你可以 select * 從具有這些 id 的行中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.