我一直在尋找這個人的年齡,並得到很多答案似乎回答了問題的問題,但也許我只是沒有'得到'它。我似乎無法將答案應用於我的特定問題。從表格中選擇一個表格中的多個列表
我有一個查詢,列出所有的學習者和拉他們所有的歷史記錄(4種),或顯示NULL
,如果他們沒有任何:
select LEARNERS.Learner_ID
, LEARNERS.Firstname
, LEARNERS.Surname
, HISTORY.DateStart
, HISTORY.Notes
from LEARNERS left outer join
HISTORY on
LEARNERS.Learner_ID = HISTORY.Learner_ID
and
HISTORY.Category_ID in (479,480,481,482)
order by LEARNERS.Learner_ID
這個偉大的工程,但只有我要看到最新的歷史記錄每個學習者(或NULL
如果沒有),所以,下面就在這裏一些搜索,我試圖做到這一點:
select LEARNERS.Learner_ID
, LEARNERS.Firstname
, LEARNERS.Surname
, HISTORY.DateStart
, HISTORY.Notes
from LEARNERS left outer join
(select MAX(DateStart) as LatestHistory, Learner_ID
from HISTORY
Where Category_ID in (479,480,481,482)
group by Learner_ID) as LatestHistoryTable on
LEARNERS.Learner_ID = LatestHistoryTable.Learner_ID
哪些工作出色,我只能得到每學習一個歷史(其最新的)。然而;我真正需要的是歷史表中的更多信息(例如History.Notes, History.Officer, History.DateStart
)。
我想簡單地添加更多的列到子查詢:
...
(select MAX(DateStart) as LatestHistory, Learner_ID, Notes, Officer
from HISTORY
Where Category_ID in (479,480,481,482)
group by Learner_ID, Notes, Officer) as LatestHistoryTable
...
但是,這給了我一個文本字段中的錯誤在group by子句:O(
我決定,我只想添加HistoryID
場,然後INNER JOIN
是到HISTORY
表外的子查詢的拉,我需要其他字段:
...
(select MAX(DateStart) as LatestHistory, Learner_ID, HistoryID
from HISTORY
Where Category_ID in (479,480,481,482)
group by Learner_ID, HistoryID) as LatestHistoryTable
...
,但是所做的只是爲每個學習者生成多行(類似於我的原始查詢),所以現在我難倒了。
我確信這對於一個有經驗的SQL編碼器來說是一件簡單的事情,因爲它必須出現很多次,但我仍然在學習,所以我有點卡住了。
謝謝你,艾倫
感謝@Kannan - 我不知道它是如何工作的,但它確實! (雖然我不得不在DateStart中刪除'as LatestHistory'的別名) –
Row_Number()根據DateStart得到降序號碼,我選擇了第一個是最新的和相關的細節...... –