Привет всем,
У меня возникли некоторые затруднения с пониманием причин группирования по SQL Server 2005.
У меня есть следующий запрос, который отлично работает и возвращает одну строку для каждого contact.id и 1-й случай события
SELECT
contact.id
,MIN(eve.date_created)
FROM _contact contact WITH(nolock)
INNER JOIN table2 tb2 WITH (nolock) ON contact.id = tb2.id1
INNER JOIN _event eve WITH (nolock) ON tb2.id2 = eve.id
INNER JOIN _cashtable cash WITH (nolock) ON cash.contact_id = contact.id
GROUP BY contact.id
Тем не менее, я ищу следующий запрос и по-прежнему извлекаю только одну строку для каждого contact.id
SELECT
contact.id
,MIN(eve.date_created)
,cash.id2 -- the cash linked to the first event
,eve.id -- the first event linked to the contact
FROM _contact contact with (nolock)
INNER JOIN _table2 tb2 WITH (nolock) ON contact.id = tb2.id1
INNER JOIN _event eve WITH (nolock) ON tb2.id2 = eve.id
INNER JOIN _cashtable cash WITH (nolock) ON cash.contact_id = contact.id
GROUP BY contact.id
Я получаю стандартное сообщение об ошибке, в котором говорится, что мне нужно добавить cash.id2 и eve.id в предложение group by, которое возвращает результаты, которые мне не нужны.
Я знаю, что есть потенциальные варианты использования rank () / разбиения
или даже включая
select(MIN(eve.date_created)
в предложении FROM, но я не уверен, что было бы лучше это поставить, и все еще не совсем понимаю, почему SQL требует, чтобы все было включено в оператор group by, и поэтому любой совет был бы хорош *
Заранее спасибо!