簡體   English   中英

使用 SQL 獲得不同的行,但也可以使用整行

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM