SQL - 按最后一个值选择所有住户

时间:2014-12-06 22:19:53

标签: sql sql-server sql-server-2012 bigdata

我遇到了一个无法解决问题的问题,所以也许你可以帮我解决一下!

我有一张桌子:

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查询,该查询为我提供了每个家庭的最高值列表(该值是累积的,因此最新的日期时间保持最高值)。我需要每个家庭的总价值(SUM)(该家庭中所有插头的总和),即一个家庭的总耗电量列表。

这甚至可能吗?我使用的是SQL Server 2012,该表有100.000.000行。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

根据你的描述,我认为你可以使用这个查询; select house_id,household_id, max(value), sum(value) from your_table_name group by house_id,household_id