Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date SQLite复合逻辑_Date_Sqlite - Fatal编程技术网

Date SQLite复合逻辑

Date SQLite复合逻辑,date,sqlite,Date,Sqlite,第一个问题!最近开始使用SQLite;没有多少编程经验 我正在开发一个从sqlite数据库生成Excel报告的工具 我目前正在编写的报告取决于在特定时间段内发布的产品每月的平均收入 例如,2011年9月的数据将是9月、8月和7月发布的所有产品当月应计收入的平均值 查询如下所示: SELECT date,avg(total_revenue) from product_table join revenue_table WHERE( ( sales_month=strftime('%m',rele

第一个问题!最近开始使用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;
where (julianday(sales_date)-julianday(release_date) BETWEEN 0 AND 90 AND addtional_filters)
我认为这产生了我想要的数据,但即使它产生了,它也是可怕的、笨拙的和不可扩展的

我的第一个问题是这种嵌套逻辑是否在sqlite WHERE语句中工作 i、 e.您能否构建一个类似以下内容的查询:

where ((a=b AND c=d) OR (a=d AND b=c))
我已经尝试过将一个OR改为where,但我无法理解结果

我的另一个问题是,是否有一种更优雅的方法来实现这一点,因为理想情况下,用户将能够控制时间范围(即从三个月更改为一个月)

请注意,每月核对发票,但整个月都会发布产品。 我尝试从sales\u month、sales\u year构造一个日期字符串,并进行如下查询:

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;
where (julianday(sales_date)-julianday(release_date) BETWEEN 0 AND 90 AND addtional_filters)

但是这似乎不起作用。

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 ...