2014-04-25 23 views
0

彙總多個日期範圍一欄我有一個MySQL表有5列:在單個查詢

Device | Name | Date | Source | Income 

無論設備也不名稱也不來源是唯一的。

我想寫用於獲取SQL如下:

Device | Name | Source | Income (for last 3 days) | Income (for last 9 days) | Income (for last 12 days) 

什麼是做到這一點的最好方法是什麼?

回答

2

你可以得到一個通過CASE語句條件SUM()

SELECT Device 
     ,Name 
     ,Source 
     ,SUM(CASE WHEN date BETWEEN UNIX_TIMESTAMP(NOW() - INTERVAL 3 day) AND UNIX_TIMESTAMP(NOW()) THEN Income END) AS Last_3_Days 
     ,SUM(CASE WHEN date BETWEEN UNIX_TIMESTAMP(NOW() - INTERVAL 9 day) AND UNIX_TIMESTAMP(NOW()) THEN Income END) AS Last_9_Days 
FROM YourTable 
GROUP BY Device 
     ,Name 
     ,Source 
+0

這會比使用3左連接在同一個錶快? – Spartanblogger

+0

@Spartanblogger我懷疑這些連接會快得多 - 但這只是一小部分,而且這樣更具可讀性 – Strawberry

+0

好的,這很有道理。謝謝! – Spartanblogger

0
SELECT COUNT(*) as total_l3d FROM table WHERE DATEDIFF(Date, NOW()) <= 3 
UNION 
SELECT COUNT(*) as total_l9d FROM table WHERE DATEDIFF(Date, NOW()) <= 9 
UNION 
SELECT COUNT(*) as total_l12d FROM table WHERE DATEDIFF(Date, NOW()) <= 12