大家好, 我有一些困難,通過聚集在SQL Server瞭解背後組的理由2005年SQL組(簡單的問題/ SQL服務器2005)
我有以下查詢,工作正常並返回每個contact.id一行和事件的第一occurence
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子句中,這會返回我不想要的結果。
我知道有使用等級()/分區 甚至包括
select(MIN(eve.date_created)
在
FROM子句中的潛在選擇,但我不知道這將是最好的把這個和我仍然相當困惑,爲什麼SQL要求一切都包含在組聲明,所以任何建議將是偉大的:)
在此先感謝!
謝謝你,我假設內部聯接(選擇id,date_created實際上是選擇MIN(date_created)?當使用它它返回許多行每個contact_id(約50),而不是一個,有沒有原因是什麼?(如果它有助於使用選擇不同的一半行數返回到每個聯繫人大約25) – Dibstar 2010-08-17 08:59:14
是的,你是對的,我應該應用min()函數date_created。 如果它返回更多如果有多於一個的min_created或現金,如果每個ID有多個行,則它會從事件中獲取剩餘的行。 – Beth 2010-08-17 14:57:17