2016-02-24 4 views
1

У меня есть db, который хранит свободное место на диске на диске каждый час.SQL Query: самая последняя запись сервера, по серверу и диску

Мой запрос в настоящее время получает вещи в следующем формате:

Name  DriveSpace Date  Time 

Server1 F: 123123123 2016-02-24 07:00:00 
Server2 F: 123123123 2016-02-24 07:00:00 
Server3 F: 123123123 2016-02-24 07:00:00 
Server1 G: 123123123 2016-02-24 07:00:00 
Server2 G: 123123123 2016-02-24 07:00:00 
Server3 G: 123123123 2016-02-24 07:00:00 
Server1 H: 123123123 2016-02-24 07:00:00 
Server2 H: 123123123 2016-02-24 07:00:00 
Server3 H: 123123123 2016-02-24 07:00:00 
Server1 F: 123123123 2016-02-24 12:00:00 
Server2 F: 123123123 2016-02-24 12:00:00 
Server3 F: 123123123 2016-02-24 12:00:00 
Server1 G: 123123123 2016-02-24 12:00:00 
Server2 G: 123123123 2016-02-24 12:00:00 
Server3 G: 123123123 2016-02-24 12:00:00 
Server1 H: 123123123 2016-02-24 12:00:00 
Server2 H: 123123123 2016-02-24 12:00:00 
Server3 H: 123123123 2016-02-24 12:00:00 

Я хочу, чтобы получить следующее:

Server1 F: freespace 2016-02-24 12:00:00 
Server1 G: freespace 2016-02-24 12:00:00 
Server1 H: freespace 2016-02-24 12:00:00 
Server2 F: freespace 2016-02-24 12:00:00 
Server2 G: freespace 2016-02-24 12:00:00 
Server2 H: freespace 2016-02-24 12:00:00 
Server3 F: freespace 2016-02-24 12:00:00 
Server3 G: freespace 2016-02-24 12:00:00 
Server3 H: freespace 2016-02-24 12:00:00 

Так в основном:

Я хочу, чтобы последняя запись каждого диска, на сервер. Итак, все последние обновления на дисках сервера 1, сервера 2 и сервера 3

+1

простого GROUP BY с MAX на даты и время седловины , – Mihai

+0

@jarlh Включение этого тега противоречит совету, указанному в описании этого тега. Просто говорю'. – Strawberry

+0

Каковы имена столбцов в таблице? –

ответ

2

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

SELECT t1.* 
FROM [Table] t1 
INNER JOIN (
    SELECT ServerName, MAX(Timestamp) TS, 
    FROM [Table] 
    GROUP BY ServerName 
) t2 ON t2.ServerName = t1.ServerName and t2.TS = t1.TimeStamp 

Или, если это как-то можно иметь несколько записей с теми же серверами и временной меткой:

WITH Keys As (
    SELECT ServerName, MAX(Timestamp) TS, 
    FROM [Table] 
    GROUP BY ServerName 
) 
SELECT v.* 
FROM Keys t 
CROSS APPLY (
    SELECT TOP 1 * 
    FROM [Table] u 
    WHERE u.ServerName = t.ServerName AND u.Timestamp = t.TS 
    ORDER BY FreeSpace 
) v 
+0

Первый запрос работает отлично, просто не принимая во внимание Time. Только дата. Поэтому я получаю именно то, что хотел, но не самый последний запрос по времени, только дата (максимальная дата, не может получить максимальное время для работы) –

+0

Для того, чтобы не учитывать время ... это выглядит как плохая конструкция таблицы , Значения даты и времени _ должны быть частью одного столбца_, и этот столбец должен быть типом 'datetime' или' datetime2'. –

+0

Это правда. После небольшого поиска я нашел что-то, что должно работать: SELECT CAST (@Date AS DATETIME) + CAST (@Time AS DATETIME) Спасибо! –

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