sql - 当不是所有天都在表中时,如何选择“每工作天/周/月/60天/90天”的平均值?

标签 sql datetime sqlite

好的,所以经过大量研究,我仍然很困惑。我得到了简单的基础知识:

我可以使用group by语句选择所有值的平均值。将日期在我的范围内并按我想要的平均值进行分组。

Select AVG(Qty)
From (
            Select Sum(ItemQty) As Qty
            From ReceivedInfo
            Where DateUsed >= '2014-04-01' 
                         AND DateUsed < '2014-04-30'
            Group By Date(DateUsed)
)


这里的问题是我需要包括表格中没有的日期。所有工作日应计入没有条目的偶数天。我不确定如何获取每天(或每月或60天等)的平均数量,包括来自数据范围的所有且仅工作日。不包括周末。

要做类似的事情就足够了:

Select Sum(QTy) / (julianday('2014-04-30') - julianday('2014-04-01' )) - (((julianday('2014-04-30') - julianday('2014-04-01' )) / 7 ) * 2) As Average
From (
            Select Sum(ItemQty) As Qty
            From ReceivedInfo
            Where DateUsed >= '2014-04-01' 
                         AND DateUsed < '2014-04-30'          
)


还是我必须确定查询之外的工作天数?

最佳答案

如果要将缺少的值视为0,则最终查询应该可以正常工作。但是,您可以简化它。因此,非常接近:

Select Sum(QTy) / (5.0/7 * (julianday('2014-04-30') - julianday('2014-04-01' ) ) )
From ReceivedInfo
Where DateUsed >= '2014-04-01' AND DateUsed < '2014-04-30';  


当然,这只是工作日数的近似值(与您建议的解决方案相似)。完整的解决方案将使用繁琐的星期几算法。

关于sql - 当不是所有天都在表中时,如何选择“每工作天/周/月/60天/90天”的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23393939/

相关文章:

sqlite - 并行聚合函数

java - FindsBug 警告 :A prepared statement is generated from a nonconstant String

azure - Azure DevOps 中的字符串未被识别为有效的日期时间错误

iphone - 未知分词器 : icu in sqlite3 request

datetime - 创建随机日期的公式,不包括周末

c# - 使用 datetime.now 以 YYYYMM 格式检索年份和月份

c# - 从 SQLite 数据库中获取列中具有相同最小值的所有行

php - 具有一个值和另一个值的记录之间的 TIMEDIFF(),而不仅仅是一个

sql - 没有销售的回头客

sql - SQL将yyyy-MM-ddThh:mm:ssZ形式的字符串转换为datetime