因为您存储在表格中的日期格式不适用于datetime functions of SQLite。
唯一可接受的日期文本格式是 YYYY-MM-DD hh:mm:ss.sss。
我建议您使用这种格式更新表格,以便 SQLite 可以直接使用您拥有的日期并且也可以进行比较:
UPDATE tablename
SET Date = SUBSTR(Date, -4) || '-' ||
CASE SUBSTR(Date, 5, 3)
WHEN 'Jan' THEN '01'
WHEN 'Feb' THEN '02'
WHEN 'Mar' THEN '03'
WHEN 'Apr' THEN '04'
WHEN 'May' THEN '05'
WHEN 'Jun' THEN '06'
WHEN 'Jul' THEN '07'
WHEN 'Aug' THEN '08'
WHEN 'Sep' THEN '09'
WHEN 'Oct' THEN '10'
WHEN 'Nov' THEN '11'
WHEN 'Dec' THEN '12'
END || '-' ||
SUBSTR(Date, 9, 11);
然后,加入一个 CTE,将星期几返回到表中并聚合:
WITH cte(nr, day) AS (VALUES ('0', 'Sun'), ('1', 'Mon'), ('2', 'Tue'), ('3', 'Wed'), ('4', 'Thu'), ('5', 'Fri'), ('6', 'Sat'))
SELECT c.day,
SUM(Value) total_value
FROM tablename t INNER JOIN cte c
ON c.nr = strftime('%w', DATETIME(t.Date, '-7 hour'))
GROUP BY c.day
ORDER BY c.nr;
请参阅demo。
如果您不想更改日期格式,则必须在聚合查询中包含将日期转换为正确格式的内容:
WITH cte(nr, day) AS (VALUES ('0', 'Sun'), ('1', 'Mon'), ('2', 'Tue'), ('3', 'Wed'), ('4', 'Thu'), ('5', 'Fri'), ('6', 'Sat'))
SELECT c.day,
SUM(Value) total_value
FROM tablename t INNER JOIN cte c
ON c.nr = strftime(
'%w',
DATETIME(
SUBSTR(t.Date, -4) || '-' ||
CASE SUBSTR(t.Date, 5, 3)
WHEN 'Jan' THEN '01'
WHEN 'Feb' THEN '02'
WHEN 'Mar' THEN '03'
WHEN 'Apr' THEN '04'
WHEN 'May' THEN '05'
WHEN 'Jun' THEN '06'
WHEN 'Jul' THEN '07'
WHEN 'Aug' THEN '08'
WHEN 'Sep' THEN '09'
WHEN 'Oct' THEN '10'
WHEN 'Nov' THEN '11'
WHEN 'Dec' THEN '12'
END || '-' ||
SUBSTR(t.Date, 9, 11),
'-7 hour'
)
)
GROUP BY c.day
ORDER BY c.nr;
请参阅demo。