2014-12-06 49 views
0

我遇到了一個問題,我無法將我的頭包住,所以也許你可以幫我解決它!SQL - 按上一個值選擇所有家庭

我有一個表:

id | datetime   | property | house_id | household_id | plug_id | value 
---+--------------------+----------+----------+--------------+---------+-------- 
1 |2013-08-31 22:00:01 | 0  | 1  | 1   | 1  | 15 
2 |2013-08-31 22:00:01 | 0  | 1  | 1   | 3  | 3 
3 |2013-08-31 22:00:01 | 0  | 1  | 2   | 1  | 21 
4 |2013-08-31 22:00:01 | 0  | 1  | 2   | 2  | 1 
5 |2013-08-31 22:00:01 | 0  | 2  | 1   | 3  | 53 
6 |2013-08-31 22:00:02 | 0  | 2  | 2   | 4  | 34 
7 |2013-08-31 22:00:02 | 0  | 1  | 1   | 1  | 16 
... 

表擁有每秒耗電量三圍爲那些在他們的家庭多(公寓)多個房屋。每個家庭都有多個電源插頭。這些房屋或家庭都沒有唯一的ID,但是通過house_id和household_id的組合來識別。

1)我需要一個SQL查詢,可以給我一個所有獨特的家庭列表。

2)我想使用1)中的列表來創建一個SQL查詢,該查詢給出了每個家庭的最高值列表(該值是累積值,所以最新的日期時間保持最高值)。我需要每個家庭的總價值(總和)(該家庭所有插頭的總和),即家庭用電總量列表。

這甚至可能嗎?我正在使用SQL Server 2012,表中有100.000.000行。

+0

(1)提供您要爲您的樣本數據的結果。 (2)澄清「household_id」的模糊含義。它是這個名字的專欄嗎?或者它是房子和家庭ID的組合? – 2014-12-06 22:28:11

+0

Household_id是列名稱。 – David 2014-12-06 23:12:20

回答

1

如果我理解正確,那麼您需要value的最高值的總和,對於住宅/家庭/插頭組合。這可能會做你想要什麼:

select house_id, household_id, sum(maxvalue) 
from (select house_id, household_id, plug_id, max(value) as maxvalue 
     from consumption 
     group by house_id, household_id, plug_id 
    ) c 
group by house_id, household_id; 
+0

這正是我想要的。謝謝你的幫助。 – David 2014-12-06 23:10:28

0

根據您的描述我認爲你可以使用這個查詢; select house_id,household_id, max(value), sum(value) from your_table_name group by house_id,household_id