sql - 如何根据“datediff”创建列
问题描述
我想从原始表格下方制作两列。两列的名称是“Avg_term”和“Max_term”。两列概念基于 datediff。
- 首先,我希望“Max_term”列显示两个连续日期之间的最大日期差异(最长天数)。
- 其次,我希望“Avg_term”列显示所有“datediff”的平均天数
谢谢你。
解决方案
您可以使用lag()
获取以前的日期/时间,然后聚合:
select max(datediff(day, prev_datetime, datetime)) as max_diff,
avg(datediff(day, prev_datetime, datetime)) as avg_diff
from (select t.*,
lag(datetime) over (partition by id order by datetime) as prev_datetime
from t
) t;
如果您希望每个 id 都有这个,我不会感到惊讶:
select id,
max(datediff(day, prev_datetime, datetime)) as max_diff,
avg(datediff(day, prev_datetime, datetime)) as avg_diff
from (select t.*,
lag(datetime) over (partition by id order by datetime) as prev_datetime
from t
) t
group by id;
推荐阅读
- python-3.x - Python 类型注解减慢代码速度
- ios - 共享扩展代码未获取 YouTube 应用 URL
- powershell - Powershell不会elseif
- azure - Get-AzRoleAssignment 在 Azure Runbook 中引发 Microsoft.Rest.Azure.CloudException
- java - 使用 Spring WebSecurityConfigurerAdapter 时如何保持我的 Elastic Beanstalk 实例健康?
- postgresql - 使用 pyarrow 将熊猫数据框批量插入到 postgresql
- assembly - Port G Atmega 128 Avr 组件
- android - 在 Android 的 FirebaseMessagingService 的 remoteMessage 中使用 getTo() 方法。我没有得到 getTo() 值
- sql - 根据父值对数据进行分组
- sql - 从 SQL 中的嵌套 json 获取数据