【问题标题】:Sql for considering previous week same day sales if same day sales are 0如果当天销售额为 0,则用于考虑前一周当天销售额的 Sql
【发布时间】:2014-09-10 22:20:03
【问题描述】:

我有一个包含两年数据的商店销售表,如下所示。 如果特定商店的特定日期的销售额为“0”,我必须在上周的同一天计算销售额。(当前第 7 天) 如果这些销售额也是“0”,那么 current_day-8 的销售额 如果这些销售额也是“0”,那么 current_day-9 的销售额 如果这些销售额也是“0”,那么 current_day-10 的销售额

Sales_table1            
day_id      week_id sales   Store
2/1/2014    201401  34566   1234
2/2/2014    201401  67777   567
2/3/2014    201401  3333    698
2/4/2014    201401  45644   345
2/5/2014    201401  2456    789
**2/6/2014  201401  3456    567**
2/7/2014    201401  5674    780
2/8/2014    201402  3333    1234
2/9/2014    201402  22222   567
2/10/2014   201402  111134  698
2/11/2014   201402  56789   345
2/12/2014   201402  4356    789
**2/13/2014 201402  0       567**
2/14/2014   201402  899     780

请给出我可以使用的查询。

【问题讨论】:

  • 如果你能稍微格式化一下你的数据和表结构会有所帮助
  • 回溯是在 10 天后结束,还是可以无限期地继续下去,直到找到一个非零值?
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 必须提及DBMS..否则会浪费不必要的时间

标签: sql netezza


【解决方案1】:

由于您没有说您使用的是哪个数据库,因此我正在使用 SQL Server 提供解决方案,因为这是我最熟悉的。

我的查询逻辑是为每个商店选择销售额大于零的所有行,其中销售信息的日期是表中的MAX日期或日期小于或等于MAX (date)-7 天(实际上不包括前 7 天的任何销售)。我这样做是因为您说您需要在第-7、-8、-9 天等进行最近的销售或销售。

然后查询从这组行中选择最近的销售日期。

;WITH Store_Dates AS (
  SELECT store, MAX(day_id) max_date, DATEADD(day, -7, MAX(day_id)) old_date
  FROM Sales_Table1
  GROUP BY store
)
,Sale_Days AS (
  SELECT MAX(day_id) day_id, Sales_Table1.store
  FROM Sales_Table1 INNER JOIN Store_Dates
  ON Sales_Table1.store = Store_Dates.store
  WHERE sales > 0
  AND (day_id = max_date 
     OR day_id <= old_date)
  GROUP BY Sales_Table1.store
)
SELECT Sales_Table1.* 
FROM Sales_Table1 INNER JOIN Sale_Days
ON Sales_Table1.store = Sale_Days.store
AND Sales_Table1.day_id = Sale_Days.day_id

SQL Fiddle

我的查询唯一没有做的是在返回 X 天后停止。您可以通过限制从 Sale_Days 查询返回的行数来做到这一点。

【讨论】:

  • DAY_ID LOC_ID 销售 1/1/2010 0:00 124 1414.15 1/2/2010 0:00 124 4529.02 1/3/2010 0:00 124 4533.91 1/4/2010 0:00 124 3357.97 2010 年 1 月 5 日 0:00 124 2987.64 2010 年 1 月 6 日 0:00 124 3306.04 2010 年 1 月 7 日 0:00 124 0 2010 年 1 月 8 日 0:00 124 3652.77 2010 年 1 月 9 日 0:00 124 4004.86 1/10/2010 0:00 124 3794.29 1/11/2010 0:00 124 4028.4 1/12/2010 0:00 124 4254.05 1/13/2010 0:00 124 3147.31 0:14/2010 0:0104 0
  • 从上面,因为 loc_id 124 的 14 天销售额为零..它应该需要第 7 天的销售额..并且由于第 7 天也是零..它应该需要第 8 天,其值为 3306.04跨度>
  • 我的查询适用于您提供的新数据,请参阅SQL Fiddle;尽管如果您保持数据格式和字段名称相同会​​有所帮助...
猜你喜欢
  • 2020-09-06
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
相关资源
最近更新 更多