获取过去7天的数据,并根据日期计算插入的行和数据

时间:2017-04-03 07:00:12

标签: android sqlite aggregate-functions

这是我的sqlite表:

TimeStamp | Counter
--------- | --------
(in ms)     ...

我希望结果像这样

| Day | Sum(Counter) |
----------------------
|Monday|10          |
|Tuesday| 20         |

1 个答案:

答案 0 :(得分:0)

毫秒不是SQLite's supported date formats之一,但可以通过在适当的位置乘以/除以1000来使用Unix时间。

在SQLite中,带有这些修饰符的date function将返回当地时区中当前日期的开头:

datetime('now', 'localtime', 'start of day')

要将此转换为毫秒,请改为使用strftime

SELECT ...
FROM MyTable
WHERE TimeStamp >= strftime('%s', 'now', 'localtime', 'start of day', '-7 days') * 1000
...

要获取时间戳的日期,您必须再次使用strftime

SELECT strftime('%w', TimeStamp / 1000, 'unixepoch', 'localtime') AS Day,
       sum(Counter)
FROM MyTable
WHERE TimeStamp >= strftime('%s', 'now', 'localtime', 'start of day', '-7 days') * 1000
GROUP BY 1;

如果您想使用日期名称而不是日期编号,请使用CASE expression

SELECT CASE strftime('%w', TimeStamp / 1000, 'unixepoch', 'localtime')
         WHEN '0' THEN 'Sunday'
         WHEN '1' THEN 'Monday'
         ...
       END AS Day,
       sum(Counter)
...