续集 - 按日期列按月分组

abh*_*jit 4 sqlite sequel

我有一个带有日期列的表,其中日期以此格式存储 -

2012-08-01 16:39:17.601455+0530
Run Code Online (Sandbox Code Playgroud)

如何按"月份"在此列上"分组"或"group_and_count"?

Mik*_*ll' 7

您最大的问题是SQLite不会直接将您的日期识别为日期.

CREATE TABLE YOURTABLE (DateColumn date);
INSERT INTO "YOURTABLE" VALUES('2012-01-01');
INSERT INTO "YOURTABLE" VALUES('2012-08-01 16:39:17.601455+0530');
Run Code Online (Sandbox Code Playgroud)

如果您尝试使用strftime()来获取月份...

sqlite> select strftime('%m', DateColumn) from yourtable;
01
Run Code Online (Sandbox Code Playgroud)

...它从第一行中获取月份,但不从第二行开始.

如果您可以将现有数据重新格式化为有效时间戳(就SQLite而言),您可以使用此相对简单的查询按年和月分组.(你几乎肯定不想单独按月分组.)

select strftime('%Y-%m', DateColumn) yr_mon, count(*) num_dates 
from yourtable 
group by yr_mon;
Run Code Online (Sandbox Code Playgroud)

如果你不能这样做,你需要做一些字符串解析.这是这个想法最简单的表达方式.

select substr(DateColumn, 1, 7) yr_mon, count(*) num_dates 
from yourtable 
group by yr_mon;
Run Code Online (Sandbox Code Playgroud)

但这可能不适合你.由于您有时区信息,因此肯定会更改某些值的月份.要获得完全通用的解决方案,我认为您需要更正时区,提取年份和月份,等等.更简单的方法是仔细查看这些数据,声明"我对这些边缘情况的计算不感兴趣",并在上面使用更简单的查询.