【问题标题】:Getting Average(DateDiff) based on Multiple Instances of a Groupby Field基于 Groupby 字段的多个实例获取平均值(DateDiff)
【发布时间】:2021-08-06 16:47:15
【问题描述】:

目前,我正在尝试获取同一个月内多次发生的多个事件的开始日期时间和结束日期时间之间的平均日期差异。有四种不同类型的事件,运行时间不同。

select
min(datetime) starttime,
max(datetime) endtime,
avg(endtime - min(datetime)) As avg_days,
event
from log_economy_event_point_spending a
AND datetime between '2021-01-01' AND '2021-04-30'
group by event
order by event

但是,使用此方法,如果事件发生多次,则需要第一个事件的开始和最后一个事件的结束。如何编写可以获取不同类型事件的平均日期时间的 SQL 代码?

非常感谢

【问题讨论】:

  • 您能粘贴一个示例输入和所需的输出吗?

标签: sql amazon-redshift datediff


【解决方案1】:

嗯。 . .我想你想要:

select event,
       min(datetime) as starttime, max(datetime) as endtime,
       (max(datetime) - min(datetime)) / nullif(count(*) - 1, 0) As avg_days
from log_economy_event_point_spending leeps 
where datetime >= '2021-01-01' and
      datetime < '2021-05-01'
group by event
order by event;

这修正了日期/时间算法以获得平均值。注意其他变化:

  • 日期比较包括四月的所有日期/时间值,我猜这是您的意图。您的版本在 4 月 30 日删除了值。
  • 表别名是有意义的,而不是任意的字母。
  • 您不能在定义别名的选择中的表达式中重复使用列别名。

【讨论】:

  • 谢谢。然而,它不完全是。我在分析的 5 个月内发生了同一事件的多个实例,因此我需要获取每个事件在整个月内发生的平均持续时间。所以事件 1 可能会发生 4 次,持续时间可能会有所不同,而事件 2 可能会发生 3 次,但始终是 3 天。非常感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 2020-05-08
  • 2020-03-09
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
相关资源
最近更新 更多