Sqlite,使用分组?对于具有日期范围的子查询

Posted

技术标签:

【中文标题】Sqlite,使用分组?对于具有日期范围的子查询【英文标题】:Sqlite, using grouping? for subqueries with date ranges 【发布时间】:2019-11-27 00:40:23 【问题描述】:

我有一个按原样工作的 sqlite 查询,它用于获取日期范围之间的平均日期

SELECT AVG(activity) as activity from activityDate WHERE DATE(activityDate) between '2019-11-01' and '2019-11-31

再次,这很完美,但我想做某种子查询操作,每个月都做同样的事情,并将每个月的结果作为不同的别名返回,就像这样

SELECT 
        (AVG(activity) from activityDate WHERE DATE(activityDate) between '2019-11-01' and '2019-11-31') as novemberActivity
        (AVG(activity) from activityDate WHERE DATE(activityDate) between '2019-12-01' and '2019-12-31') as decemberActivity

        //?

但我的问题是在做了这些别名行之后,我该怎么做 FROM 语句?

我只想能够返回 12 个结果,每个月的平均值,都有自己的别名。

【问题讨论】:

【参考方案1】:

我想你想要条件聚合:

SELECT AVG(CASE WHEN DATE(activityDate) between '2019-11-01' and '2019-11-30' THEN activity END) as activity_201911,
       AVG(CASE WHEN DATE(activityDate) between '2019-12-01' and '2019-12-31' THEN activity END) as activity_201912       
FROM activityDate 

【讨论】:

啊,是的,就是这样!谢谢你。我已经为 mysql 和 db2 采用了这个,但这确实是我第一次使用 sqlite,所以我没有走那条路。谢谢!

以上是关于Sqlite,使用分组?对于具有日期范围的子查询的主要内容,如果未能解决你的问题,请参考以下文章

提供来自 Main 组的子类型列表以及范围编号

MDX 查询以对具有特定日期范围的日期维度进行分组

SQLite 按选定日期范围内的所有日期分组,即使数据不存在

使用 Oracle SQL 的子查询

SQL Case 语句子选择内的子选择分组

来自 LeftJoin 的 MAX() 值的子查询