【问题标题】:SQL - SELECT all households by last valueSQL - 按最后一个值选择所有家庭
【发布时间】:2014-12-06 22:19:52
【问题描述】:

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

我有一张桌子:

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 和 home_id 的组合标识。

1) 我需要一个 SQL 查询,它可以为我提供所有独特家庭的列表。

2) 我想使用 1) 中的列表创建一个 SQL 查询,该查询为我提供每个家庭的最高值列表(该值是累积的,因此最新的日期时间持有最高值)。我需要每个家庭的总价值 (SUM)(该家庭中所有插头的总和),即家庭总用电量的列表。

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

【问题讨论】:

  • (1) 为样本数据提供所需的结果。 (2) 澄清“household_id”的歧义。是那个名字的列吗?还是房子和户口的组合?
  • Household_id 是列名。

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


【解决方案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;

【讨论】:

  • 这正是我想要的。感谢您的帮助。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多