Tsql 仅当行数为'时求和;我们相隔不到一周

Tsql 仅当行数为'时求和;我们相隔不到一周,tsql,sum,case,case-when,Tsql,Sum,Case,Case When,我有一张有ProductID、日期和价格的桌子。我正在尝试编写以下代码: 确定每种产品销售最高的一周 忽略productid,查找销售额最大化的周数,即。 将所有日期拆分为7天,以便在每个7天内 期间销售额最大化。这7天是不允许的 重叠 我对SQL真的是个新手,我已经为此挣扎了几天,并查看了堆栈溢出。在第一个任务中,我认为我找到了理想的代码,但它似乎对其他人有效,但只返回给定日期的产品销售额,而不是一周的总和 Select a.date, a.productid, sum(sales) fr

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

  • 确定每种产品销售最高的一周
  • 忽略productid,查找销售额最大化的周数,即。 将所有日期拆分为7天,以便在每个7天内 期间销售额最大化。这7天是不允许的 重叠
我对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”的总销售额。
非常感谢您的帮助。

您使用的是什么版本的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行,一年中每完整周和部分周一行(除非您在给定的一周内没有销售)。我希望这能回答你的问题?如果没有,我可以提供其他解决方案,但我节省了自己的写作时间

您使用的是什么版本的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行,一年中每完整周和部分周一行(除非您在给定的一周内没有销售)。我希望这能回答你的问题?如果没有,我可以提供其他解决方案,但我节省了自己的写作时间

用您正在使用的数据库标记您的问题。样本数据和期望的结果将非常有用。按照措辞,这个问题听起来像三个问题,相当宽泛。用你正在使用的数据库标记你的问题。样本数据和期望的结果将非常有用。按照措辞,这个问题听起来像是三个问题,相当广泛。感谢您的评论,这项任务希望确定可以在任何一天开始的几周。因此,例如,如果产品3在从周三开始的7天内销售最多,则代码将获取该信息,而您的代码限制我们从周一开始。顺便说一句,我正在使用SQLServerManagementStudio,如果您有任何想法,我很想听到更多。我目前正在尝试构建一个函数,如果I.)产品ID匹配,则返回1。),否则返回0。你知道怎么做吗?动态的日期会让你陷入麻烦。我不介意举手说这有点超出我的能力,但这至少可以给你一部分答案:谢谢你的评论,这项特别任务希望确定可以从任何一天开始的几周。因此,例如,如果产品3在从周三开始的7天内销售最多,则代码将获取该信息,而您的代码限制我们从周一开始。顺便说一句,我正在使用SQLServerManagementStudio,如果您有任何想法,我很想听到更多。我目前正在尝试构建一个函数,如果I.)产品ID匹配,则返回1。),否则返回0。你知道怎么做吗?动态的日期会让你陷入麻烦。我不介意举手说这有点超出我的能力,但这至少可以给你一部分答案: