我有一個Oracle數據庫表結構,其行數通過採訪過程填充,每個「客戶」都可以多次訪問採訪過程,即使是同一天。該表結構如下:SQL查詢顯示數據表中最近一行的數據,或者爲空
Table: Customers
-------------
CustomerId
...
Table: Questions
-------------
QuestionId | QuestionText
0 | Last Location?
1 | Last Color?
2 | Last Food?
3 | Last Drink?
Table: Answers
-------------
Id | CustomerId | QuestionId | AnswerText | Created_On
1 0 0 Chicago 08/15/2017 7:56:34 AM
2 0 0 Laramie 08/16/2017 9:27:23 AM
3 0 0 Null 08/17/2017 6:34:56 AM
4 0 1 Null 08/15/2017 7:56:34 AM
5 0 1 Green 08/16/2017 9:27:23 AM
6 0 1 Blue 08/17/2017 6:34:56 AM
7 0 2 Pizza 08/15/2017 7:56:34 AM
8 0 2 Null 08/16/2017 9:27:23 AM
9 0 2 Null 08/17/2017 6:34:56 AM
10 0 3 Null 08/15/2017 7:56:34 AM
11 0 3 Null 08/16/2017 9:27:23 AM
12 0 3 Null 08/17/2017 6:34:56 AM
目前我們顯示「最後一次採訪」通過查詢數據爲最近的時間戳對每一個問題,並顯示結果,它是否有一個值或爲空,這樣:
LastAnswer_QueryResult
-------------
Id | CustomerId | QuestionId | AnswerText | Created_On
3 0 0 Null 08/17/2017 6:34:56 AM
6 0 1 Blue 08/17/2017 6:34:56 AM
9 0 2 Null 08/17/2017 6:34:56 AM
12 0 3 Null 08/17/2017 6:34:56 AM
的新要求,是展示最新的答案:對於使用值的每個問題,或者爲空,如果這個問題從來沒有得到回答。如果我能得到查詢後的結果爲樣本數據上面看起來像:
MostRecentAnswer_QueryResult
Id | CustomerId | QuestionId | AnswerText | Created_On
2 0 0 Laramie 08/16/2017 9:27:23 AM
6 0 1 Blue 08/17/2017 6:34:56 AM
7 0 2 Pizza 08/15/2017 7:56:34 AM
12 0 3 Null 08/17/2017 6:34:56 AM
到目前爲止,我能想出的最好的辦法是最古老的行插入到一個臨時表,然後在環如果它們存在較新的時間戳,則更新這些值。然後完成後,使用最新的時間戳更新任何空值。有沒有一種方法,我可以做到這一點沒有循環和插入臨時表?
感謝拳頭名AnswerText約「時間戳」的字條 - 我不得不混淆實際列名稱,並忘記它是一個保留字。在示例中已修復。 –