2016-05-11 2 views
0

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

Measure type  |Grade  |date 
LNF    |K   |1/1/2016 
LNF    |K   |2/1/2016 
CNF    |K   |3/1/2016 
LDR    |K   |4/1/2016 

LNF, CNF, LDR - виды меры, K - уровень оценки. Мне нужно указать только последнюю запись (по дате), когда тип меры и уровень оценки равны.

в примере правильный запрос будет список только для ЛНФ и Grade К.

LNF    |K   |2/1/2016 

Итого результат должен быть

LNF    |K   |2/1/2016 
CNF    |K   |3/1/2016 
LDR    |K   |4/1/2016 

Пожалуйста, помогите мне в этом какой-либо моей SQL эксперт.

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

+0

Какое условие для типа меры и ее класса равны? – AxelH

+0

Ваше изменение изменило запрос. Тем не менее, NewUser дал решение, соответствующее вашему новому запросу час назад, и Giorgos Betsos дал решение, соответствующее первоначальному запросу (где вы можете удалить предложение 'HAVING', чтобы получить тот же результат) еще час назад. Почему бы вам не принять один из ответов? Есть ли еще проблема? –

+0

Работа выполнена, Большое спасибо Giorgos Betsos, Новый пользователь, Thorsten Kettner за то, что вы привержены этому билету. Отличная работа falks – Lasan

ответ

2

Попробуйте, как это,

SELECT Measuretype 
    ,Grade 
    ,Max(DATE) as LatestDate 
FROM YourTableName 
GROUP BY Measuretype 
    ,Grade 

Это дало бы выход, как этот

Measure type  |Grade  |date 
LNF    |K   |2/1/2016 
CNF    |K   |3/1/2016 
LDR    |K   |4/1/2016 
1

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

SELECT Measure type, Grade, MAX(date) 
FROM mytable 
GROUP BY Measure type, Grade 
HAVING COUNT(*) > 1 

Запрос возвращает записи с повторяющимися Measure type, Grade значения. Он выбирает последнюю дату для каждой группы по запросу в OP.

0

Ах, это было немного странно :-) Вы ищете дублирует (два или более записей с тем же типом и типом измерения) и хотите показать последнюю запись для каждой обнаруженной группы.

select * 
from mytable 
where (measure_type, grade, date) in 
(
    select measure_type, grade, max(date) 
    from mytable 
    group by measure_type, grade 
    having count(*) > 1 
); 
+0

Другие ответы верны. Поскольку ваша таблица, как показано, содержит только сгруппированные столбцы плюс дату, вы можете просто выбрать max (date) для каждой группы. Вам нужен только мой запрос, если ваши записи содержат больше столбцов, которые вы хотите показать. Что касается вашего последнего редактирования, где вам нужны три строки, а не только дубликаты: удалите 'count (*)> 1' из запроса для достижения этого. –

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