首页 > 解决方案 > 仅当它们彼此相隔一周内时才对行求和

问题描述

我有一张包含 ProductID、日期和价格的表格。我正在尝试编写以下代码:

我对 SQL 真的很陌生,我已经为此苦苦挣扎了几天,并查看了堆栈溢出。在第一个任务中,我认为我找到了理想的代码,但它似乎对其他人有用,但只返回给定日期的产品销售额,而不是一周的总和。

Select a.date, a.productid, sum(sales) from 
 (SELECT [Date Of Sale] as 'Date'
  ,[Product ID] as 'ProductID'
  , [Sales in GBP] as 'Sales'
 FROM [blah].[blah-blah])
) as a
  where a.date between dateadd(day, -6, a.date) and dateadd(day, 0, a.date)
  group by a.date, a.productid;

我试图修剪必要的东西,但没有错误消息,它只返回日期、productid、销售额,但对于日期“2007-01-13”,它只返回当天的产品销售额,而不是比从“2007-01-06”到“2007-01-13”的总销售额。任何帮助将不胜感激。

标签: tsqlsumcasecase-when

解决方案


您使用的是什么版本的 SQL?MySQL 4.0 及更高版本具有函数 WEEK(),它将日期拆分为从 0 到 53 的周,表示一年中的周顺序。查看您的代码,以及您正在尝试做的事情,我认为以下内容可能对您有用:

  SELECT WEEK([Date of Sale]) as date,
         [Product ID] as product_id, 
         sum([Sales in GBP]) as sales  
    FROM [blah].[blah-blah]
group by 1,2

这将为您提供 52 或 53 行,用于一年中的每个完整和部分周(除非您在给定的一周内没有销售)。我希望这回答了你的问题?如果不是,我可以提供其他解决方案,但我正在节省自己的写作时间。


推荐阅读