sql比较两个日期列,并将第一行保留在第二列较大的位置

yiytaume  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(236)

我有一张有两列日期的表 next_start_datecancel_date .
团体ID个人ID取消日期下一个日期取消后开始日期10012017-11-062014-03-26100112017-11-062017-01-0910012017-11-062018-04-1620012018-06-042014-03-2620012018-06-042017-01-0920012018-06-042018-04-1620012018-08-282014-03-2620012018-08-282017-01-0920012018-282018-16
期望输出: days_customer_came_back 是一个计算列:
团体ID个人ID取消日期下一个日期开始日期取消后的日期客户返回10012017-11-062018-04-1616120012018-06-04nullnull20012018-08-28NullNullNullNull
我想比较一下这两个专栏 cancel_datenext_start_date_after_cancel 这个 next_start_date_after_cancel 必须在 cancel_date 以便我们获得这些日期之间的正日差。
如果对同一个项目有多个“下一个\u开始\u日期\u取消后” cancel_date ,我们只保留第一个最小值,而忽略其他值。
此外,如果要输入 cancel_date 如果所有可用的 next_start_date_after_cancel 如果在取消日期之前,我们将替换它,它将为空,并且日差将输出为空
请帮忙。。。

9nvpjoqh

9nvpjoqh1#

使用 FILTER 排除 cancel_date 大于 next_start_date_after_cancel ,获取 min() 它在子查询或cte中的值。最后减去这两个日期,得到不同的天数:

WITH j AS (
  SELECT 
    group_id,individual_id,cancel_date,
    min(next_start_date_after_cancel) FILTER (WHERE next_start_date_after_cancel > cancel_date) AS next_start_date_after_cancel
  FROM t GROUP BY 1,2,3)
SELECT 
  group_id,individual_id,cancel_date,next_start_date_after_cancel,
  next_start_date_after_cancel-cancel_date
FROM j;

演示: db<>fiddle

相关问题