К сожалению, мои знания, связанные с заявлениями типа group by
и having
весьма ограничен, так что надеюсь, вы можете мне помочь:SQL Server: как получить самую новую дату в таблицу с несколькими одинаковыми клавишами
У меня есть мнение - вот выдержка - (если у нас есть несколько европейцев здесь - это v021 из Winline/мезонного):
ID | Artikelbezeichnung1 | Bez2 | mesoyear
_____________________________________________________________________
1401MA70 | Marga ,Saracena grigio,1S,33,3/33,3 | Marazzi | 1344
1401MA70 | Marga ,Saracena grigio,1S,33,3/33,3 | Marazzi | 1356
1401MA70 | Marga ,Saracena grigio,1S,33,3/33,3 | Marazzi | 1356
1401MA71 | Marga ,Saracena beige,1S,33,3/33,3 | Marazzi | 1344
1401MA71 | Marga ,Saracena beige,1S,33,3/33,3 | Marazzi | 1356
1401MA71 | Marga ,Saracena beige,1S,33,3/33,3 | Marazzi | 1356
2401CR13 | Crista,Mahon rojo,1S,33,3/33,3 | Cristacer | 1332
2401CR13 | Crista,Mahon rojo,1S,33,3/33,3 | Cristacer | 1344
Так ID
не является уникальным и мне просто нужно один с самым высоким Валом в mesoyear
.
Мой кулак раствор:
Select
c015 as ID,
c003 as Artikelbezeichnung1,
c074 as Bez2,
mesoyear
from
CWLDATEN_91.dbo.v021
group by
c015
having
mesoyear = max(mesoyear)
Но это не работает на всех ...
Msg 8121, Level 16, State 1, Line 8
Колонка «CWLDATEN_91. dbo.v021.mesoyear 'недействителен в предложении HAVING, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Так что я просто удалил having
заявление и пошел "лучше":
Msg 8120, уровень 16, состояние 1, строка 2
Колонка 'CWLDATEN_91.dbo.v021.c003' является недействителен в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Поэтому я попытался удалить ошибку, просто добавив вещи в группу. И это сработало.
Select
c015 as ID,
c003 as Artikelbezeichnung1,
c074 as Bez2,
max(mesoyear)
from
CWLDATEN_91.dbo.v021
group by
c015, c003, c074
дает мне именно то, что я хочу.
Но правильный выбор содержит около 24 столбцов и некоторые вычисления. Проблема не может быть решена только путем добавления всех столбцов в group by
...?
Может кто-нибудь, пожалуйста, помогите мне найти правильную команду?
Спасибо!
Поскольку у вас уже есть ответы, используя 'ROW_NUMBER', я просто собираюсь добавить вам несколько ссылок о ранговых функциях T-SQL - http://msdn.microsoft.com/en-us/library/ms189798.aspx & http://msdn.microsoft.com/en-us/library/ms186734.aspx –
А также, если вы просто хотите использовать 'GROUP BY' - это возможно. Вы можете обернуть результат группировки в подзапрос, затем «JOIN» обратно в исходную таблицу, используя все столбцы группировки. (но я бы рекомендовал row_number) –