0

这里的第一个问题!最近开始使用 SQLite;没有太多的编程经验。

我正在开发一种从 sqlite 数据库生成 Excel 报告的工具。

我目前正在编写的报告取决于查找在特定时间范围内发布的产品的每月平均收入。

例如,2011 年 9 月的数据是 9 月、8 月和 7 月发布的所有产品在该月累积的所有收入的平均值。

查询如下所示:

SELECT date,avg(total_revenue) from product_table join revenue_table

WHERE(

(
sales_month=strftime('%m',release_date,'+1 months') AND
sales_year=strftime('%Y',release_date,'+1 months')
)

OR

(
sales_month=strftime('%m',release_date,'+2 months') AND
sales_year=strftime('%Y',release_date,'+2 months')
)

OR

(
sales_month=strftime('%m',release_date,'+3 months') AND
sales_year=strftime('%Y',release_date,'+3 months')
)

OR

(
sales_month=strftime('%m',release_date) AND
sales_year=strftime('%Y',release_date)
)

AND
additional_filters=true
)

group by sales_year, sales_month;

我认为这会产生我想要的数据,但即使它产生了,它也是可怕的、笨拙的和不可扩展的。

我的第一个问题是这种嵌套逻辑是否在 sqlite WHERE 语句中有效,即您可以构造如下查询:

where ((a=b AND c=d) OR (a=d AND b=c))

我已经尝试将其中一个 OR 更改为 where,但我无法理解结果。

我的另一个问题是是否有更优雅的方式来执行此操作,因为理想情况下用户将能够控制时间范围(即从三个月变为一个月)。

请注意,发票是按月整理的,但产品会在整个月内发布。我尝试从 sales_month,sales_year 构造一个日期字符串,并进行如下查询:

where (julianday(sales_date)-julianday(release_date) BETWEEN 0 AND 90 AND addtional_filters)

但这似乎不起作用。

4

1 回答 1

0

子句中的表达式WHERE可以任意复杂。

您的销售/发布比较可以使用以下表达式完成:

WHERE date(sales_date, 'start of month')
      BETWEEN date(release_date, 'start of month')
          AND date(release_date, 'start of month', '+2 months')
  AND ...
于 2013-10-04T16:00:57.543 回答