2014-11-24 2 views
0

Я хотел бы получить последнюю запись для каждого сервера.получить последнюю запись для каждого ID

Вот несколько примеров данных:

TimeGenerated  SourceName   ComputerName Message 
2014-11-22 21:48:30 Windows Update Agent Server1  Update Failed 
2014-11-22 21:42:30 Windows Update Agent Server2  Update Failed 
2014-11-22 21:45:30 Windows Update Agent Server2  Update Failed 
2014-11-22 21:43:30 Windows Update Agent Server1  Update Failed 

Желаемая Выход:

TimeGenerated  SourceName   ComputerName Message 
2014-11-22 21:48:30 Windows Update Agent Server1  Update Failed 
2014-11-22 21:45:30 Windows Update Agent Server2  Update Failed 

Я пробовал:

SELECT * FROM TABLE 
GROUP BY ComputerName 
ORDER BY TimeGenerated ASC 

Но что выдает противоречивые результаты и не дает мне последний в большинство случаев.

Я также пробовал некоторые подзапросы, но неудачно провалился.

ответ

1
SELECT * 
FROM yourtable 
INNER JOIN (
    SELECT MAX(timeGenerated) as maxtime, ComputerName 
    FROM yourtable 
    GROUP BY ComputerName 
) AS latest_record ON (yourtable.timeGenerated = maxtime) 
    AND (latest_record.ComputerName = yourtable.ComputerName) 

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

+0

Спасибо, это спасатель, я сводил меня с ума. – sspeed

0

Попробуйте это:

SELECT ComputerName, Max(date) 
FROM TABLE 
GROUP BY ComputerName 
+0

Это также работает. Я думал, что раньше я получал непоследовательные данные без участия в подзапросе, но это тоже работает. – sspeed

+0

Рад, и это работает :) – SMA

0

Я использую только функцию GROUP, вы можете отображать только столбцы, которые являются частью этого оператора SELECT. Если вам нужно больше отображаемых данных, вам нужно работать с подзапросом. Например, если вы хотите «выбрать *», вы не можете просто использовать только GROUP BY и без подзапроса. Таким образом, это зависит от того, что вы хотите отобразить.

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