2012-12-27 81 views
2

我有兩個表「列表」和「出價」。我有一個查詢將返回特定用戶已出價的所有列表,其中end_date已過去。我需要做的是限制結果甚至進一步找到用戶出價的列表,並且是最後一個出價者。下面是該查詢我到目前爲止...MySQL內部在第二張表的最大值加入兩個表

SELECT listings.end_date, listings.user_id, listings.title, listings.auc_fp, listings.id, listings.auc_image1 
FROM listings INNER JOIN bids ON listings.id = bids.listing_id 
WHERE bids.user_id=$userid 
AND listings.end_date < NOW() 
ORDER BY list_ts DESC" 

我不擅長與子查詢和我假設我將需要一個在這裏找到了「投標」所有用戶出價表其中bid_ts(投標時間戳)是出價表中對應的listing_id的最新時間戳。我的出價表中的列爲:listing_id,user_id,bid,bid_ts。

+------------+---------+------+---------------------+ 
| listing_id | user_id | bids | bid_ts    | 
+------------+---------+------+---------------------+ 
| 1   | 10  | 100 | 2012-11-16 00:54:03 | 
| 1   | 11  | 101 | 2012-11-16 00:54:04 | 
| 2   | 10  | 33 | 2012-11-16 00:54:03 | 
| 2   | 11  | 34 | 2012-11-16 00:54:04 | 
| 2   | 12  | 35 | 2012-11-16 00:54:05 | 
+------------+---------+------+---------------------+ 

感謝所有幫助

+0

可以添加樣本記錄你想要的結果沿着你的問題? –

+0

我編輯了我的問題以顯示我的出價表。我想要過濾的是每個user_id和每個listing_id的最新出價。 – Budove

+0

爲上述數據添加您所需的輸出。並且還要指定**上市**和**投標**表格樣本數據。 –

回答

4
SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT listing_ID, user_ID, MAX(bid_ts) maxDate 
      FROM tableName 
      GROUP BY listing_ID, user_ID 
     ) b ON a.listing_ID = b.listing_ID AND 
       a.user_ID = b.user_ID AND 
       a.bid_ts = b.maxDate 
+0

謝謝。我想我現在理解這個概念好一點了。 – Budove

+0

擁有子查詢的原因是它爲每個user_id分別獲取每個listing_id的最新日期。然後將結果返回到原始表格以獲取完整的行細節':D' –