2016-09-23 4 views
0

Я пытаюсь вернуть одно значение столбца на основе максимального значения другого столбца и определенного идентификатора третьего столбца, все это в одной таблице ,SQL Select, основанный на максимальном значении одного столбца и определенного идентификатора от другого

Я пытался сделать следующий SQL, но это не работает:

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

Единственное значение, я хочу это столбец «значение» на основе максимального значения и определенного числа идентификаторов других столбцов той же таблицы.

Любые предложения?

ответ

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» s. – 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. Является ли столбец value в таблице event_log?

Но я не думаю, что вам нужно присоединиться вообще. Попробуйте следующее:

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

Да, столбец «значение» находится в таблице event_log. – Istvan

Смежные вопросы