【问题标题】:SQL Query to get a total value for each week across yearsSQL 查询以获取跨年每周的总值
【发布时间】:2015-03-26 16:02:18
【问题描述】:

我需要在 SQL Server 中编写一个 SQL 查询,我希望我能解释我所追求的。我有几年的数据。这是一些数据库的示例。

我想要做的是每周获取价值 New_Zealand 的 Bovine 总数。

因此,对于 2013-01-12 周,总值将为 36080(该周动物为牛的新西兰的总和)。在数据库中的所有星期重复此操作。

我目前有这个 SQL 选择语句。

SELECT SUM(New_Zealand) 
FROM Slaughter_Data 
WHERE Animal = 'Bovine' 
  AND WeekEndingDate BETWEEN '2010-01-04' AND '2015-01-03' 
  AND New_Zealand IS NOT NULL 
GROUP BY DATEPART(wk, WeekEndingDate)

这是错误的,因为它给了我 52 周的时间,所有 New_Zealand 值在 Animal = Bovine 处求和,并在所有年份中对那一周求和。我每年都想要。谁能告诉我我需要改变什么?

我希望我已经说清楚了,如果我还没有说清楚,请告诉我,以便我澄清。

【问题讨论】:

  • 您需要将年份添加到您的组中。如果可能的话,我会考虑对您的结构进行规范化,这样您的数据中就不会有国家作为列。看起来其他一些作品也可以正常化。
  • 您还需要按年份分组
  • New_Zealand 实际上是视图中的派生列。实际数据库不包含该列,仅包含 North_Island 和 South_Island。您是否建议我有一列用于值,然后另一列将它们区分为北岛或南岛?肖恩欢迎您对数据规范化提出任何建议,因为我对所有这些都是新手?

标签: sql sql-server


【解决方案1】:

WeekEndingDate 分组怎么样,因为它会得到你当年那一周的号码。

SELECT SUM(New_Zealand)
FROM Slaughter_Data
WHERE Animal = 'Bovine'
    AND WeekEndingDate BETWEEN '2010-01-04' AND '2015-01-03'
    AND New_Zealand IS NOT NULL
GROUP BY WeekEndingDate

【讨论】:

  • 如果我这样做会发生什么,它将多年来每周的所有值结合起来。即 2010 年、2011 年、2012 年、2013 年、2014 年、2015 年第 1 周的所有值将被合并。我实际上已经设法解决它会发布答案,因为我认为这对其他人有益。如果有人有更好的答案,我会将其标记为正确。我对 SQL 很陌生,所以边走边学。不过,我希望人们知道我的数据是否需要标准化。
  • 我认为您指的是Week_number,而我指的是WeekEndingDate,它应该是一年中唯一的一周。
  • 不,我试过了。它将多年来的所有值合并到同一周?
  • 根据您的数据,这是不可能的! WeekEndingDate 上的聚合(如“2013-01-03”)不能合并其他年份的值。
  • 看来你是对的。虽然我可以发誓我首先尝试过,因为这似乎是显而易见的事情。出于某种原因,我在一周内将其全部分组。所以谢谢。已相应调整。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
相关资源
最近更新 更多