2017-08-06 42 views
0

我有一些問題從通過使用max函數使用內部連接組。 我的細節: 表庫存SQL內部連接最大功能,通過羣組

site_ID tank_number volume times-tramp  ID 
    1  1   5000 06/08/2017 15:00  1 
    1  1   4900 06/08/2017 15:01  2 
    1  2   6000 06/08/2017 15:05  3 
    1  3   4000 06/08/2017 15:05  4 
    2  1   3000 06/08/2017 15:33  5 
    2  2   2000 06/08/2017 15:34  6 
    1  1   4800 06/08/2017 15:36  7 
    1  2   5800 06/08/2017 16:00  8 

表wp_users(WordPress的)

ID Name 
1 aaa 
2 bbbb 

現在,我在WordPress wpdatatable插件的使用,所以我想用內部聯接,並與tank_number組,並使用數據更新按時間排序 結果應該是:
當用戶「aaa」登錄時,那麼ID將會是1 想要顯示的結果。

site_ID tank_number volume times-tramp  
    1  1   4800 06/08/2017 15:36  
    1  2   5800 06/08/2017 16:00   
    1  3   4000 06/08/2017 15:05 

但 我得到了這樣的結果:

site_ID tank_number volume times-tramp 
1  1   5000 06/08/2017 15:00  
1  2   6000 06/08/2017 15:05  
1  3   4000 06/08/2017 15:05 

所以可以每一個幫助,告訴我,所以我必須表明我的代碼顯示錯誤,由於我不能用2臺加入通過正確的語法sql。

這段代碼可以工作,而內部聯接

select site_id, tank_product, volume, timestramp from inventory as t1 
inner join (
    select tank_product as tank, max(timestramp) as time from inventory 
    where site_id=1 group by tank_product) as t2 
    on t1.tank_product = t2.tank and t1.timestramp = t2.time and t1.site_id=1 

,現在我試圖用內使用加入,但現在不行。

SELECT inventory.site_id, 
     inventory.tank_product, 
     inventory.volume, 
     inventory.timestramp, 
     wp_users.ID 
FROM inventory as t1 
    INNER JOIN wp_users 
    (SELECT inventory.tank_product, max(inventory.timestramp) as time from inventory 
    WHERE inventory.site_id=wp_users.ID GROUP BY inventory.tank_product) as t2 
    ON t1.inventory.tank_product=t2.tank AND t1.inventory.timestramp=t2.time AND t1.inventory.site_id=wp_users.ID 

可以告訴我正確的方法來使用由max函數組的內連接。

回答

0

因此,您提供的模式和您提供的查詢不對齊(命名遍佈整個地方)。如果你提供了一個sql小提琴幫助展示你的問題(至少在將來),這將是非常有用的。

在任何情況下,我覺得你很接近:

select t2.site_id, t2.tank_product, t1.volume, t2.time 
from (
select site_id, tank_product, max(timestramp) as time 
from inventory 
group by site_id,tank_product) t2 
inner join inventory t1 
on t2.site_id=t1.site_id and t1.tank_product=t2.tank_product and t2.time=t1.timestramp 
inner join wp_users u 
on u.id=t2.site_id 
where u.id=1 
order by t2.site_id,t2.tank_product asc 

(假設你通過wp_users.id進入查詢;我有硬編碼與u.id = 1)。

fiddle

+0

謝謝you.The結果是正常的,我想,但它同樣對由於第一我的代碼如果我們修復代碼中的u.ID所以它可以工作,但我試圖從wordpress的另一個表加入user.ID – Thebiggun31

0

嘗試運行此:

SELECT i1.site_ID, i1.tank_product, i1.volume, i.timestramp, iu.User_ID 
    FROM Inventory AS i1 
INNER JOIN (
SELECT u.ID AS UserID, i.tank_product, MAX (i.timestramp) AS time 
FROM Inventory AS i2 
INNER JOIN wp_users AS u 
ON i2.site_id = u.ID 
GROUP BY u.ID, i.tank_product 
) as iu 
ON i1.tank_product = iu.tank_product 
AND i1.timestramp = iu.time 
AND i1.site_ID = iu.UserID; 
+0

我發現這個錯誤(找不到結果。請檢查這個查詢是否正確!表構造函數需要一個返回數據來建立一個wpDataTable的查詢。 錯誤:您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'作爲用戶ID,i.tank_product'的附近使用正確的語法作爲iu ON i1.tank_product = iu.tank_product和i1.ti'在第1行) – Thebiggun31

+0

再試一次腳本plz ... – Ikrom