2016-09-23 62 views
0

我想基於另一列的最大值和第三列的特定ID返回列的一個值,所有這些在同一個表中。SQL選擇基於一列的最大值和另一個的特定ID

我試着做下面的SQL語句,但不工作:

SELECT "value" 
FROM event_log 
    JOIN (SELECT MAX("time") AS max_time 
     FROM event_log WHERE "eid" = 6) 

我想的唯一價值是基於最大值和其他列的特定ID號的「價值」列同一張桌子。

有什麼建議嗎?

回答

1

你需要指定ON子句JOIN操作:

SELECT "value" 
FROM event_log AS t1 
JOIN (
    SELECT MAX("time") AS max_time 
    FROM event_log 
    WHERE "eid" = 6 
) AS t2 ON t1."time" = t2.max_time 
WHERE t1."eid" = 6 
+0

如果兩行有相同的時間?可能在外部查詢中需要'WHERE「eid」= 6'。 – Hogan

+0

它不起作用。它返回具有不同「eid」的更多行。 – Istvan

+0

這個工作,謝謝你! – Istvan

0
SELECT "value" 
FROM event_log AS t1 
JOIN (
    SELECT MAX("time") AS max_time, eid 
    FROM event_log 
    WHERE "eid" = 6 
    Group By eid 
) AS t2 ON t1."time" = t2.max_tim 
AND t1.eid = t2.eid 
0
  1. 您使用子查詢,並試圖將它加入到現有的表,但是,除非你想有一個完全連接(如果這是你想要的,你需要在查詢中包含短語Full Join來明確指定),則需要指定連接的連接條件,而不連接條件。
  2. 您需要一個子查詢的別名,然後才能在外部查詢的其餘部分使用它。
  3. 最後,您試圖從子查詢中選擇名爲value的列。但是在子查詢中沒有名爲value的列。 event_log表中的列value

但我認爲你根本不需要加入。試試這個:

SELECT "value", 
    (Select MAX("time") 
    FROM event_log WHERE "eid" = 6) maxTime 
FROM event_log l 
+0

是的,「值」列在event_log表中。 – Istvan

相關問題