sql - 基于 ID 和条件的两个日期之间的差异
问题描述
我必须为每个唯一 ID(发货编号)计算两行之间的日期差异,其中第一次被归类为(取件),最后一次被归类为(交付)。本质上,有没有办法在 Quicksight(或 SQL)中创建计算字段或等效项,它执行以下操作(其中发货编号、事件类型和事件时间是列名):
for each unique shipment-number find the date difference (event-time) between event-type == delivered and event-type == pickup
假设特定货件编号有四行:
物流编号 | 事件类型 | 事件类型 |
---|---|---|
001 | 捡起 | 11.01.2021 |
001 | 在途中 | 12.01.2021 |
001 | 到达目的地 | 13.01.2021 |
001 | 发表 | 15.01.2021 |
那么预期的结果将是与 11.01.2021(取货)和 15.01.2021(交付)的差异,即 4 天。
我尝试过使用 datediff,但是,这需要两个日期字段。通过按事件类型为每个唯一装运编号提取事件时间来创建两个字段 (firstEvent) 和 (lastEvent) 是否可行?但是,我不确定是否要这样做。
任何帮助/建议都会有很大帮助。
解决方案
您可以按如下方式使用条件聚合:
select shipment_number,
datediff(day, min(case when event_type = 'pickup' then event_date end)
- max(case when event_type = 'delivered' then event_date end) ) as diff
from your_table
group by shipment_number
推荐阅读
- git - Visual Studio 在拒绝推送时不显示来自 Git 的远程消息
- scala - Spark Dataframe 将部分文件写入 _temporary 中,而不是直接在输出目录中创建 partFiles
- json - 使用 Azure PowerShell 为 Azure Log Analytics 和基于指标的标准创建多个警报?
- java - 如何访问数组中的数组?
- python - 在 Python 中未正确调用 Google Cloud PubSub
- react-native - react-native 调试 - n、r 和 t 是什么意思
- python - Python - 递归字谜函数
- python - mrjob 返回非零退出状态 256
- c# - 在编写单元测试用例时,httpContext 在不使用 Moq 或 Rhino 模拟的情况下变为空
- angular - 在 html Angular5 中添加动态文本时出错