我有一个商店销售表,如下图所示,包含两年的数据。 如果特定商店的特定日期的销售额为“0”,我必须在上周的同一天进行销售。(当前第7天) 如果那些销售额也是'0'那么当前销售额为8天 如果那些销售额也是'0'那么当前销售额为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
请提供我可以使用的查询。
答案 0 :(得分:0)
由于您没有说明您正在使用哪个数据库,因此我使用SQL Server作为我最熟悉的解决方案。
我的查询逻辑是为每个商店选择销售额大于零的所有行,其中销售信息的日期是表中的最大日期或日期小于或等于MAX (日期)-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
我的查询唯一没做的就是在返回 X 天数后停止。您可以通过限制从Sale_Days
查询返回的行数来实现。