【发布时间】:2023-03-26 19:29:01
【问题描述】:
我在 SQLite 中有时间以 '2012-02-21 00:00:00.000000' 的形式出现,并且想平均一天中的时间。日期无关紧要——只是时间。因此,例如,如果数据是:
'2012-02-18 20:00:00.000000'
'2012-02-19 21:00:00.000000'
'2012-02-20 22:00:00.000000'
'2012-02-21 23:00:00.000000'
20、21、22、23 的平均值应为 21.5 或 21:30(或美国晚上 9:30)。
Q1) 在 SQLite 的 SELECT 查询中是否有最好的方法来做到这一点?
但更困难的是:如果一个或多个日期时间跨过午夜怎么办?他们肯定会在我的数据集中。示例:
'2012-02-18 22:00:00.000000'
'2012-02-19 23:00:00.000000'
'2012-02-21 01:00:00.000000'
现在平均值似乎应该是 (22 + 23 + 1)/3 = 15.33 或 15:20(下午 3:20)。但这会歪曲数据,因为这些事件都发生在晚上,从 22:00 到 01:00(晚上 10 点到凌晨 1 点)。实际上,更好的方法是将它们平均为 (22 + 23 + 25)/3 = 23.33 或 23:20(晚上 11:20)。
Q2) 我应该对我的 SELECT 查询做些什么来考虑到这一点,还是我必须用 Python 编写代码?
【问题讨论】:
-
你需要更好地定义你的“平均”。似乎有时您希望日期很重要,但有时您不希望。
-
@muistooshort 你能解释一下是什么让你这么说吗?除非我误解了我的需求(也许我是),否则我不希望日期变得重要。事实上,这些字段也可能没有日期部分,所以它们可能像“22:00:00”、“23:00:00”和“01:00:00”,我想要平均值那些在 23:20 之前出来的人。
-
您为“平均值”提供了两个可能的值:15:20 和 23:20。第一个只查看时间,第二个使用日期转换知识来避免对小时处理进行 mod-24 调整。
-
@muistooshort 好吧,我所追求的只是 23:20。问题是,我不会拥有每个日期的所有数据(会有差距)。因此,如果我使用您的原始代码,日期信息将很重要,但如果我的值之间有几天的差距,则不会给我(在此示例中)23:20。我宁愿进行 mod-24 调整,只是不确定如何最好地在 SQLITE 或 Python 中进行调整。这更有意义吗?感谢您的耐心等待。
-
您是否考虑过您只是从有限的样本中得出错误结论的可能性?如果您查看整个数据集,异常值问题可能会消失。
标签: python sql sqlite time average