2013-10-08 55 views
0

因爲我需要創建白天總額數據的物化視圖的性能的原因。時間戳存儲爲UNIX時間戳。如何計算的MySQL GROUP BY邊界與UNIX時間戳

要允許更新(保換)到物化視圖的表我想它在UNIX時間戳格式有一個時間戳,再一次,匹配的一天的開始(或結束)。該時間戳將成爲表格關鍵的一部分。 每當基表數據發生變化時,我就可以僅更新該表的特定日子(再次用於表現)。

我目前聚集聲明看起來是這樣的:

REPLACE INTO aggregate_data (channel_id, type, timestamp, value) 
SELECT channel_id, 'day' AS type, MAX(timestamp) AS timestamp, SUM(value) AS value 
FROM data 
GROUP BY channel_id, YEAR(FROM_UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000)); 

我怎樣才能而不是最後的彙總數據的時間戳MAX(時間戳)匹配當天的邊界(24:00)?

回答

0

不知道我理解你的問題的權利。你在找這樣的東西嗎?

REPLACE INTO aggregate_data (channel_id, type, timestamp, value) 
SELECT channel_id, 'day' AS type, 

UNIX_TIMESTAMP(DATE_FORMAT(FROM_UNIXTIME(MAX(timestamp)), '%Y-%m-%d 23:59:59')) 
AS timestamp, 

SUM(value) AS value 
FROM data 
GROUP BY channel_id, YEAR(FROM_UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000)); 
+0

謝謝這段代碼你 - 的到和從UNIX時間戳轉換給我帶來了正確的道路上 – andig

0

無需使用MAX,你可以使用FROM_UNIXTIME()到UNIX時間戳轉換爲特定的一天。

REPLACE INTO aggregate_data (channel_id, type, timestamp, value) 
SELECT channel_id, 
     'day' AS type, 
     FROM_UNIXTIME(timestamp, '%Y-%m-%d 00:00:00') AS timestamp, 
     SUM(value) AS value 
FROM data 
GROUP BY channel_id, FROM_UNIXTIME(timestamp, '%Y-%m-%d 00:00:00'); 

檢查也SQLFiddler

+0

不認爲這可以作爲時間戳grouped-所以哪一個是有人嗎? – andig