2

我正在尝试选择过去 10 天的销售数据,并在没有销售的情况下包含 0 的日期。

为此,我正在尝试使用双重和按级别连接,但我不知道为什么日期不匹配,并且查询失败。

这是基本的工作查询:

SELECT 
  current_date - (LEVEL - 1)
  ,(LEVEL - 1)  as result
FROM Dual CONNECT BY Level <= 10
order by result desc

结果:

Current_date-(LEVEL-1) RESULT
13-MAR-15   9
14-MAR-15   8
15-MAR-15   7
16-MAR-15   6
17-MAR-15   5
18-MAR-15   4
19-MAR-15   3
20-MAR-15   2
21-MAR-15   1
22-MAR-15   0

所以我认为这会很好,现在我有了我想要的日期,我可以尝试添加一个子查询来获取销售额(我考虑过加入,但不清楚如何加入查询中的级别):

SELECT 
  current_date - (LEVEL - 1)
  ,(select count(1) from sales where for_date=(current_date - (LEVEL - 1))) as sale_volume
  ,(LEVEL - 1)  as result
FROM Dual CONNECT BY Level <= 10
order by result desc

但是,它总是返回 0,即使在我知道有销售的日子里:

Current_date-(LEVEL-1) SALE_VOLUME RESULT
13-MAR-15   0   9
14-MAR-15   0   8
15-MAR-15   0   7
16-MAR-15   0   6
17-MAR-15   0   5
18-MAR-15   0   4
19-MAR-15   0   3
20-MAR-15   0   2
21-MAR-15   0   1
22-MAR-15   0   0
4

2 回答 2

1
SELECT 
    count(sales.for_Date) 
FROM 
   (SELECT 
       Trunc(current_date) - (LEVEL - 1) as d
   FROM 
       Dual CONNECT BY Level <= 10) as DateRangeTbl
LEFT JOIN
    sales 
ON
    Sales.for_Date = DateRangeTbl.d
GROUP BY
    DateRangeTbl.d
于 2015-03-22T13:59:12.300 回答
0

Aheho 给出的解决方案的一个补充 - 您还需要从 Sales.for_Date 列中删除时间组件,否则 ON 子句中的相等条件将不起作用。这可以通过 trunc() 或在 ON 子句中使用 to_char(your-date,date-format) 将两个日期转换为字符串来实现。我用这两种方法让它在我的数据库上工作。日期格式可以是例如“DD-MON-YYYY”。

于 2015-03-23T16:14:17.597 回答