- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我的目标是生成一份报告,显示车库在一周中的特定日期和/或一天中的特定时间的平均占用率(y 轴)。我的数据模型如下:
has_many
汽车和车库 has_many
约会,through: :cars
has_many
约会此外,Garage 有一个字段capacity(整数)
,这是车库中可容纳的最大汽车数量。
如果我有一个过去 6 个月的约会列表,我想生成一个线图,其中 x 轴显示一周中的每一天,分割为 4 小时的时间间隔,而 y-轴显示给定天/小时间隔内 6 个月内的平均占用率(车库中的汽车数量/容量),我如何才能收集这些数据以进行报告?
例如一辆车从一个约会的返回时间到下一个约会的取车时间为In
,从约会的取车时间为Out
,直到它的returned_at
时间。
我在将这些数据点与有意义地报告并将它们呈现给最终用户的最佳方式联系起来时遇到了很多麻烦。
我正在使用 Rails 4.1 和 Ruby 2.0。
编辑:SQL Fiddle - http://sqlfiddle.com/#!9/a72fe/1
最佳答案
此查询将完成所有操作(适应您添加的 fiddle ):
SELECT a.ts, g.*, round((a.ct * numeric '100') / g.capacity, 2) AS pct
FROM (
SELECT ts, c.garage_id, count(*) AS ct
FROM generate_series(timestamp '2015-06-01 00:00' -- lower and
, timestamp '2015-12-01 00:00' -- upper bound of range
, interval '4h') ts
JOIN appointment a ON a.picked_up_at <= ts -- incl. lower
AND (a.returned_at > ts OR
a.returned_at IS NULL) -- excl. upper bound
JOIN car c ON c.id = a.car_id
GROUP BY 1, 2
) a
JOIN garage g ON g.id = a.garage_id
ORDER BY 1, 2;
如果 returned_at IS NULL
,则此查询假定汽车仍在使用中。所以 NULL 不应该出现在其他情况下或者你在计算中有错误。
首先,我使用方便的 generate_series()
构建时间序列功能。
然后加入时间戳落在预订内的约会。
我假设每个约会都包含较低的时间戳和排除较高的时间戳,因为这是普遍的惯例。
在我们加入车库之前进行聚合和计数(这种方式更快)。比较:
在外部 SELECT
中进行百分比计算。
我将 bigint
数字与 numeric
(或可选的 real
或 float
)相乘以保留小数位,这将是在整数除法中切断。然后我四舍五入到两位小数。
请注意,这并不是每个 4 小时周期的平均百分比,而只是每个时间点的当前百分比,这是真实平均值的近似值。您可能会以一个奇怪的时间戳开始,例如“2015-06-01 01:17”,这样就不会陷入可能会在整点或其他时间翻过来的预订之间,这可能会增加近似值的平均误差。
您也可以对 4 小时的时间段进行精确计算,但这更复杂。一种简单的技术是将间隔减少到 10 分钟或足够详细以捕获完整图片的某种粒度。
相关(附精确计算示例):
关于sql - 报告一组记录的分组平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34321403/
SQL、PL-SQL 和 T-SQL 之间有什么区别? 谁能解释一下这三者之间的区别,并提供每一个的相关使用场景? 最佳答案 SQL 是一种对集合进行操作的查询语言。 它或多或少是标准化的,几乎所有关
这个问题已经有答案了: What is the difference between SQL, PL-SQL and T-SQL? (6 个回答) 已关闭 9 年前。 我对 SQL 的了解足以完成我的
我在数据库中有一个 USER 表。该表有一个 RegistrationDate 列,该列有一个默认约束为 GETDATE()。 使用 LINQ 时,我没有为 RegistrationDate 列提供任
我有一个可能属于以下类型的字符串 string expected result 15-th-rp 15 15/12-rp 12 15-12-th
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 9年前关闭
我有一个存储过程(称为 sprocGetArticles),它从文章表中返回文章列表。这个存储过程没有任何参数。 用户可以对每篇文章发表评论,我将这些评论存储在由文章 ID 链接的评论表中。 有什么方
我目前正在做一个 *cough*Oracle*cough* 数据库主题。讲师介绍embedded SQL作为让其他语言(例如 C、C++)与(Oracle)数据库交互的方式。 我自己做了一些数据库工作
SQL Server 中 SQL 语句的最大长度是多少?这个长度是否取决于 SQL Server 的版本? 例如,在 DECLARE @SQLStatement NVARCHAR(MAX) = N'S
这个问题已经有答案了: Simple way to transpose columns and rows in SQL? (9 个回答) 已关闭 8 年前。 CallType
预先感谢您对此提供的任何帮助。 假设我有一个查询,可以比较跨年的数据,从某个任意年份开始,永无止境(进入 future ),每年同一时期直到最后一个完整的月份(其特点是一月数据永远不会显示至 2 月
我在数据库中有一个 USER 表。该表有一个 RegistrationDate 列,该列的默认约束为 GETDATE()。 使用 LINQ 时,我没有为 RegistrationDate 列提供任何数
下面是我试图用来检查存储过程是否不存在然后创建过程的 sql。它会抛出一个错误:Incorrect syntax near the keyword 'PROCEDURE' IF NOT EXISTS
我有一个同事声称动态 SQL 在许多情况下比静态 SQL 执行得更快,所以我经常看到 DSQL 到处都是。除了明显的缺点,比如在运行之前无法检测到错误并且更难阅读,这是否准确?当我问他为什么一直使用
来自 lobodava 的动态 SQL 查询是: declare @sql nvarchar(4000) = N';with cteColumnts (ORDINAL_POSITION, CO
使用 SQL Server 中的存储过程执行动态 SQL 命令的现实优点和缺点是什么 EXEC (@SQL) 对比 EXEC SP_EXECUTESQL @SQL ? 最佳答案 sp_executes
我有这个有效的 SQL 查询: select sum(dbos.Points) as Points, dboseasons.Year from dbo.StatLines dbos i
我正在调试一些构建成功运行的 SQL 命令的代码。 然而,在查询结束时,查询结果似乎被写入了一个文本文件。 完整的查询如下 echo SELECT DATE,DATETABLE,DATE,APPDAT
我有一些创建表的 .sql 文件(MS SQL 数据库): 表_1.sql: IF OBJECT_ID (N'my_schema.table1', N'U') IS NOT NULL DROP TAB
我写了下面的 SQL 存储过程,它一直给我错误@pid = SELECT MAX(... 整个过程是: Alter PROCEDURE insert_partyco @pname varchar(20
我在 SQL Server 2005 中有包含两列 Fruit 和 Color 的表,如下所示 Fruit Colour Apple Red Orange
我是一名优秀的程序员,十分优秀!