我正在尝试编写一个查询,该查询将查找组中除具有最大值的行之外的所有行。到目前为止,我有一个查找具有最大值的行的查询,但现在我需要查找所有其余的行。下面是一个包含两个数据库和示例数据的SQLFiddle。我还有一个查找最大行数的查询。http://sqlfiddle.com/#!2/514d2/33
对于那些不想使用SQLFiddle的人...表名: listings表名: bids
SELECT listings.end_date, listings.user_id, listings.title,
listings.auc_fp, listings.id, listings.auc_image1
FROM listings
JOIN bids b1
ON b1.listing_id=listings.id
LEFT JOIN bids b2
ON b2.listing_id=listings.id AND b1.bid < b2.bid
WHERE b1.user_id = 1
AND b2.bid IS NULL
AND listings.end_date > NOW()
ORDER BY listings.list_ts DESC上面是查找最大行数的查询。我正在尝试将listings表与listings.id=bids.listing_id上的bids表结合起来。然后,我需要找到用户($user或用户"1")竞标该列表的所有行。然后,我需要排除用户拥有最大出价的列表(这就是上面的查询所做的)。
我最初认为我可以使用上面的查询作为子查询,以排除用户是最大投标人的列表。但我不确定这是否是最好的方法,而且我不擅长使用子查询。
发布于 2012-12-30 05:46:02
请注意,答案根据下面的评论修改了几次。
SELECT
lst.end_date,
lst.title,
lst.auc_fp,
lst.id as listing_id,
lst.auc_image1,
b.user_id as bid_user_id,
b.bid as bid_amount,
maxbids.maxbid as maxbid_for_listing
FROM listings lst
INNER JOIN
(
SELECT listing_id, MAX(bid) maxbid
FROM bids b
GROUP BY listing_id
) maxbids ON lst.id = maxbids.listing_id
INNER JOIN bids maxusers ON maxusers.bid = maxbids.maxbid AND maxusers.listing_id = maxbids.listing_id
INNER JOIN bids b ON
maxbids.listing_id = b.listing_Id AND
b.bid < maxbids.maxbid AND
b.user_id <> maxusers.user_id
WHERE lst.end_date > NOW()
ORDER BY lst.list_ts DESChttps://stackoverflow.com/questions/14086041
复制相似问题