我有一个SQLite数据库,其中包含以下字段:
date (yyyymmdd fomrat)
total (0.00 format)
数据库中通常有2个月的记录。有没有人知道SQL查询来查找每周平均值?
我可以轻松执行:
SELECT COUNT(1) as total_records, SUM(total) as total FROM stats_adsense
然后将总数除以7,但除非在db中有7天可以被7整除,否则我认为它不会非常准确,特别是如果记录少于7天。
要获得每日摘要,这显然只是total / total_records。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
您可以尝试这样的事情:
SELECT strftime('%W', thedate) theweek, avg(total) theaverage
FROM table GROUP BY strftime('%W', thedate)
答案 1 :(得分:0)
您的每周平均值是
daily * 7
显然,这不会考虑具体的周数,但您可以通过缩小日期范围内的结果集来实现这一目标。
答案 2 :(得分:0)
我不确定语法在SQLite中是如何工作的,但是一种方法是解析每个[date]字段的日期部分,然后在WHERE子句中指定哪个WEEK和DAY边界,然后指定GROUP by星期。无论是否有行,这都会给你一个真正的平均值。
像这样(使用T-SQL):
SELECT DATEPART(w, theDate), Avg(theAmount) as Average
FROM Table
GROUP BY DATEPART(w, theDate)
这将每周返回一行。您可以在WHERE子句中对其进行过滤,以将其限制在给定的日期范围内。
希望这有帮助。
答案 3 :(得分:0)
您必须省略添加中不属于整周的记录。因此,在总结之前,您必须找到日期的最小值和最大值,操纵它们以使它们形成“整个”周,然后使用WHERE运行原始查询,该WHERE根据新值限制日期值范围。也许你甚至可以把所有这些都放在一个查询中。我会把它留给你。 ; - )
显然,那些被“截断”的值不会被使用。如果一周没有足够的价值,那就根本没有结果。但显然没有解决方法。