我有一個很大型數據集,我需要爲每個可用的time_stamp選擇特定的標籤,但是如果給定標籤存在多個time_stamps,我需要選擇一個加上最新的加載時間戳。帶查詢語句和最新加載時間的SQL查詢
這是我的數據的簡化版本設置:
|tag_name | value | time_stamp | loadtimestamp |
|:---------:|:-------:|:-----------------:|:-----------------:|
| TAG1 | 10 |2017-01-19 22:16:04|2017-01-19 22:49:58|
| TAG2 | 89 |2017-01-19 22:16:04|2017-01-19 22:49:58|
| TAG3 | 22 |2017-01-19 22:16:04|2017-01-19 22:49:58|
| TAG1 | 12 |2017-01-19 22:17:05|2017-01-19 22:49:58|
| TAG2 | 93 |2017-01-19 22:17:05|2017-01-19 22:49:58|
| TAG3 | 15 |2017-01-19 22:17:05|2017-01-19 22:49:58|
| TAG1 | 9 |2017-01-19 22:16:04|2017-01-22 12:29:12|
| TAG2 | 88 |2017-01-19 22:16:04|2017-01-22 12:29:12|
| TAG3 | 21 |2017-01-19 22:16:04|2017-01-22 12:29:12|
| TAG1 | 15 |2017-01-19 22:18:05|2017-01-19 22:49:58|
| TAG2 | 98 |2017-01-19 22:18:05|2017-01-19 22:49:58|
| TAG3 | 23 |2017-01-19 22:18:05|2017-01-19 22:49:58|
起初,我並沒有考慮過的問題loadtimestamp和我的查詢語句如下:
select time_stamp,
MAX(Case when tag_name = 'TAG1' then value else NULL END) as "Tagname 1",
MAX(Case when tag_name = 'TAG2' then value else NULL END) as "Tagname 2",
MAX(Case when tag_name = 'TAG3' then value else NULL END) as "Tagname 3",
from "DATATABLE".calculated_data
group by time_stamp
我使用的情況下聲明,因爲我需要一種方法爲數據集中的每個標籤賦予特定的名稱。
結果是,在22:16:04,我有多個標籤結果/值。我的需求是,我只爲每個tag/time_stamp擁有一個值,並且它是具有最新loadtimestamp的值。
我已經看到試圖拉取最新日期的幾個版本的查詢,但我找不到一種方法來應用它,同時也使用case語句。
我試過幾個版本的子查詢,但我相信結果是每個時標籤被發現,其查詢的整個數據集尋找同樣的標籤和TIME_STAMP,然後選擇一個與最新loadtimestamp。由於我的數據集大約是5000萬行,而我的結果表應該是大約100萬行,所以這種方法是不可行的(說實話,我從來沒有真正實現它)。我的末端方法需要進行一些優化,以便它可以在合理的時間內執行。
爲了清楚起見,我對SQL非常陌生,並且深入了一點,所以我很抱歉如果這太過基本或者可能不太清楚。對於此問題的任何幫助或指導,我將不勝感激。
謝謝!
這麼多感謝你卡皮爾! –