当前位置: 代码迷 >> Sql Server >> 逻辑有关问题:取销售额不为0 的最近一个月的数据
  详细解决方案

逻辑有关问题:取销售额不为0 的最近一个月的数据

热度:75   发布时间:2016-04-24 08:49:13.0
逻辑问题:取销售额不为0 的最近一个月的数据
开发有新需求,要做数据对比。取当月数据和上月数据进行对比分析,如果上个月销售额为0 就取上上个月,依次类推!

如果把每条记录的所有月份销售数据都关联起来,会不会效率特别低~

求大神给个思路~
------解决思路----------------------
WITH table1(商品ID,月份,销售额)AS(
    SELECT 1,201510,20 UNION ALL
    SELECT 1,201509,0 UNION ALL
    SELECT 1,201508,10 UNION ALL
    SELECT 2,201510,0 UNION ALL
    SELECT 2,201509,9 UNION ALL
    SELECT 2,201508,7 UNION ALL
    SELECT 3,201509,0 UNION ALL
    SELECT 3,201508,11
)
        SELECT a.商品ID,
               b.销售额
          FROM (
                SELECT DISTINCT 商品ID
                  FROM table1
               ) a
   CROSS APPLY (
                    SELECT TOP 1 *
                      FROM table1
                     WHERE table1.商品ID = a.商品ID
                       AND 销售额 <> 0
                  ORDER BY 月份 DESC
               ) b

     商品ID      销售额
----------- -----------
          1          20
          2           9
          3          11


------解决思路----------------------
SELECT  a.*,b.销售额 AS 上个月
FROM    Tab AS a
        INNER JOIN Tab AS b ON a.[月份] > b.[月份]
                               AND [月份] = ( SELECT  MAX([月份])
                                            FROM    tab
                                            WHERE   [月份] < a.[月份] AND b.[销售额]>0
                                          )


在月份同销售栏位加上索引,性能影响不大
  相关解决方案