【问题标题】:SQL query to group by month part of timestampSQL查询按时间戳的月份部分分组
【发布时间】:2013-08-07 21:37:49
【问题描述】:

我在 SQL 查询方面真的很糟糕,但我正在学习,所以请原谅这个问题。

这是我当前的查询:

SELECT TIMESTAMP, SUM( electricity ) AS electricity,  `siteID` 
FROM table
WHERE (
MONTH(  `TimeStamp` ) =10)
GROUP BY siteID

我的桌子是这样的:

#########################################
# Id # SiteID # TimeStamp  # Elecricity #
# 0  # 100    # 10/08/2012 # 50         #
# 1  # 98     # 10/08/2012 # 32         #
# 2  # 100    # 10/09/2012 # 96         #
# 3  # 94     # 10/09/2012 # 25         #
# 4  # 100    # 10/10/2012 # 100        #
# 5  # 100    # 10/11/2012 # 55         #
#########################################

我要做的是总结每个站点每个月的所有天数,以便每个站点和每个月都有一个答案。所以在这个例子中,查询应该返回 siteID 100 的电量值的总和,因为它们都在第 10 个月,对于 siteID 98 和 94 也是一样。

谢谢

【问题讨论】:

  • 。 .该查询看起来像您想要的那样(假设您没有多年的记录)。你有问题吗?
  • 假设这个问题只有一个站点...您真的想要每月一条记录吗?还是每年每个月都有一条记录?换句话说,您希望 2012 年 1 月和 2013 年 1 月是单独的记录还是合并为一个记录?
  • 按照下面 Brian 的建议,我添加了一个字段来指定我想要的年份;我之前忽略了这个问题。戈登,这只是为每个站点返回一个值,我想要每个站点/月组合的值,如下所示

标签: mysql sql timestamp group-by


【解决方案1】:
SELECT month('TIMESTAMP'), SUM( electricity ) AS electricity,  `siteID` 
FROM table
WHERE (
MONTH(  `TimeStamp` ) =10)
GROUP BY siteID, month('TIMESTAMP')

这会奏效。你必须考虑的一件事是那个月不是唯一的。在这种情况下,2012 年 10 月与 2013 年 10 月相同。您可能需要为年份添加另一列。

【讨论】:

    猜你喜欢
    • 2014-05-31
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多