許多設備返回一個值。只有在變化,這個值被存儲在一個表:從排序不完整的數據集中提取最大值
Device Value Date
B 5 2017-07-01
C 2 2017-07-01
A 3 2017-07-02
C 1 2017-07-04
A 6 2017-07-04
值可以在任何時間進入表(即日期不continiously增量)。多個設備可以在同一天存儲它們的值。
請注意,儘管表格中每個日期通常只有少數設備,但所有設備在該日期實際上都有一個值:這是迄今爲止存儲的最新設備。例如,在2017-07-02
上只有設備A存儲了一個值。當日的B和C的值是存儲在2017-07-01
上的值;這些在-02
上仍然有效,它們只是沒有改變。
要檢索給定日期的所有設備的值,例如,我使用這個:
select device,value from data inner join(select device,max(date)as date from data where date <= "2017-07-04"
group by device)latestdate on data.device = latestdate.device and data .date = latestdate.date
Device Value
A 6
B 5
C 1
問題:我想讀取給定範圍內所有日期的所有設備的最大值。結果集將是這樣的:
Date max(value)
2017-07-01 5
2017-07-02 5
2017-07-04 6
..我不知道,如果僅僅使用SQL
是可能的。直到現在,我所得到的只是在一羣特殊的聯合和分組中失去了。
(數據庫是sqlite3的。通用SQL將是不錯,但我還是很高興聽到有關特定於其它數據庫的解決方案,尤其是PostgreSQL的或MariaDB的)
額外獎金:包括缺失日期-03
,確切地說:返回給定日期的值,不一定是出現在表中的值。
Date max(value)
2017-07-01 5
2017-07-02 5
2017-07-03 5
2017-07-04 6
提示:使用日曆表進行外連接以包含缺失的日期。 – jarlh