2016-02-14 195 views
1

我試圖執行什麼,我認爲是一個簡單的SQL語句,但是當我嘗試使用子查詢說,正在返回多列,我收到一個錯誤,但我需要返回多個列。SQL子查詢返回多個列

我只是想展現兩列,我的用戶名,他們的當前餘額

這裏是SQL:

SELECT playid, username, balance FROM plays order by playid desc limit 25 

將返回:

Play ID Username Balance 

593  ken  -3497 

592  cass -204 

591  cass -184 

590  cass -164 

589  ken  -517 

580  ken  -837 

579  sam  250 

545  cass -134 

544  cass -114 

這正是我想要的是。我所有成員的名單和他們的餘額。現在,我需要運行在此查詢的子查詢,只選擇具有最高ID(最近平衡)的平衡,這將返回一個表是這樣的:

Play ID Username Balance 

593  ken  -3497 

592  cass -204 

579  sam  250 

最新的平衡是唯一的事情,我很擔心。當我嘗試執行第二個查詢時,出現錯誤,說我正在嘗試返回多個列。 (這我當然)

任何幫助將不勝感激。

+0

您KHOW SQL? – Blip

+0

我認爲你需要澄清你想要什麼作爲你的輸出。你畫的最後一張桌子不符合你對你想要的書面描述。 – Nicarus

+0

什麼是你的第二個查詢 – Blip

回答

0

編輯:現在,您已經提到這是MySQL。試試這個:

SELECT 
    p1.playid, 
    p1.username, 
    p1.balance 
FROM 
    plays p1 
JOIN 
    (
    SELECT 
     MAX(playid) AS playid, 
     username 
    FROM 
     plays 
    GROUP BY 
     username 
    ) p2 
    ON (p2.username = p1.username) 
    AND (p2.playid = p1.playid); 

- 這可能是你在找什麼。我想,你希望通過用戶名基礎上,發揮ID最近平衡

SELECT 
    playid, 
    username, 
    balance 
FROM 
    (
    SELECT 
     playid, 
     username, 
     balance, 
     ROW_NUMBER() OVER(PARTITION BY username ORDER BY playid DESC) AS seq 
    FROM 
     plays 
    ) base 
WHERE 
    seq = 1 

這通過用戶名序列的記錄,上PLAYID下降,然後返回最近的每個記錄。

+0

這返回了一個錯誤:#1064 - 你的SQL語法有錯誤;檢查對應於你的MySQL服務器版本在第11行附近使用「(PARTITION BY用戶名ORDER BY PLAYID DESC)爲SEQ FROM 戲劇 )」正確的語法手冊,但我覺得這是我需要的。我會繼續阻止它。謝謝。 – xar86413

+1

MySQL不具備該功能,不幸的是 - 這就是爲什麼標記/提及您正在使用的DBMS非常重要................ – Nicarus

+0

查看更新並告訴我如何它會和你一起玩。 – Nicarus