2014-01-20 3 views
0

Я пытаюсь создать запрос, чтобы вернуть файл с максимальной версией, независимо от значения сервера. Как я мог это сделать?Возвращение max из запроса

фактические данные таблицы:

server filename v4 date 
local  code1.zip 41 0000-00-00 
remote code1.zip 39 0000-00-00 
local  code1.zip 28 0000-00-00 
remote code1.zip 21 0000-00-00 
local  code1.zip 32 0000-00-00 
remote code1.zip 27 0000-00-00 

запрос:

SELECT 
    server, 
    filename, 
    max(v4) as v4, 
    date 
FROM 
    table 
WHERE 
    date ='0000-00-00' 

GROUP BY 
    filename, 
    server, 
    date 

Фактический результат:

server filename v4 date 
local  code1.zip 41 0000-00-00 
remote code1.zip 39 0000-00-00 

Ожидаемый результат:

server filename v4 date 
local  code1.zip 41 0000-00-00 

EDIT: Это для MySQL

Заранее спасибо.

+0

Попробуйте эту 'GROUP BY date' только –

+0

ЗАКАЗАТЬ что-то LIMIT 1 – Strawberry

ответ

4

Если вы просто хотите, чтобы строка с самым большим v4 вы можете использовать этот

SELECT 
    server, 
    filename, 
    v4, 
    date 
FROM 
    `table` 
WHERE 
    date ='0000-00-00' 
ORDER BY v4 DESC 
LIMIT 1 

, чтобы получить максимальную V4 для каждого файла, сначала вы получите максимум (v4) группа по имени файла, то INNER JOIN обратно с table, как показано ниже

SELECT T1.server,T1.filename,T1.v4,T1.date 
FROM 
`table` T1 INNER JOIN 
    (SELECT filename,max(v4) as maxv4 
    FROM `table` 
    WHERE date = '0000-00-00' 
    GROUP BY filename)T2 
ON T1.filename = T2.filename AND T1.v4 = T2.maxV4 
WHERE date = '0000-00-00'; 
+0

@TinTran, и если у меня есть более одного кода? например, code1.zip, code2.zip? Я знаю, что его не отметили в вопросе, но не могли бы вы привести пример, если бы у вас было больше? =) спасибо! –

+0

обновил мой ответ, чтобы вы могли захватить max (v4) для каждого имени файла (code1.zip, code2.zip). –

+0

Работала по назначению. –

0

Вы можете использовать этот запрос:

Select Top 1 * 
From table 
Where v4 = (
SELECT 
    max(v4) as v4, 
FROM 
    table 
WHERE 
    date ='0000-00-00' 

GROUP BY 
    v4 
) 
1

Чтобы получить ю е макс версию вы только должны сделать:

SELECT MAX(version) FROM table 

Если вы хотите, имя файла (если у вас есть еще один столбец id):

SELECT t2.filename, t2.maxver 
FROM table t1 INNER JOIN 
(SELECT id, MAX(version) maxver 
FROM table 
GROUP BY id) t2 ON t1.id=t2.id 
ORDER BY t2.maxver DESC 
LIMIT 1 

Если вы хотите, имя файла (если вы не имеете другой столбец id, используйте filename):

SELECT t2.filename, t2.maxver 
FROM table t1 INNER JOIN 
    (SELECT filename, MAX(version) maxver 
     FROM table 
     GROUP BY filename) t2 ON t1.filename=t2.filename 
     WHERE t2.maxver = (SELECT MAX(version) FROM table) 

Есть много способов сделать это.

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