在SAP HANA中按ID分组计算不同行的日期间隔天数
计算分组ID的日期差解决方案
原始数据表:
ID Date 1 29/11/23 1 16/10/23 2 28/1/23 2 20/1/23
SQL 实现
MySQL/MariaDB
如果需要按ID分组自动计算日期差(默认取最大日期减最小日期):
SELECT ID, DATEDIFF( STR_TO_DATE(MAX(Date), '%d/%m/%y'), STR_TO_DATE(MIN(Date), '%d/%m/%y') ) AS date_diff FROM date_table GROUP BY ID;
如果需要指定具体日期的计算顺序(比如ID1用29/11/23减16/10/23,ID2用20/1/23减28/1/23):
SELECT DISTINCT ID, CASE WHEN ID = 1 THEN DATEDIFF(STR_TO_DATE('29/11/23', '%d/%m/%y'), STR_TO_DATE('16/10/23', '%d/%m/%y')) WHEN ID = 2 THEN DATEDIFF(STR_TO_DATE('20/1/23', '%d/%m/%y'), STR_TO_DATE('28/1/23', '%d/%m/%y')) END AS date_diff FROM date_table;
PostgreSQL
PostgreSQL支持直接用日期减法运算:
SELECT DISTINCT ID, CASE WHEN ID = 1 THEN TO_DATE('29/11/23', 'DD/MM/YY') - TO_DATE('16/10/23', 'DD/MM/YY') WHEN ID = 2 THEN TO_DATE('20/1/23', 'DD/MM/YY') - TO_DATE('28/1/23', 'DD/MM/YY') END AS date_diff FROM date_table;
Excel 实现
假设数据位于A1:B5区域(A列为ID,B列为日期):
手动计算指定日期差:
- ID1的日期差:
=DATE(2023,11,29)-DATE(2023,10,16),结果为44天 - ID2的日期差:
=DATE(2023,1,20)-DATE(2023,1,28),结果为**-8天**
- ID1的日期差:
自动按ID分组计算:
若使用Excel 365,用BYROW和UNIQUE函数批量处理:=BYROW(UNIQUE(A2:A5),LAMBDA(x,MAXIFS(B2:B5,A2:A5,x)-MINIFS(B2:B5,A2:A5,x)))旧版Excel可使用数组公式(输入后按Ctrl+Shift+Enter):
=INDEX(MAXIFS(B:B,A:A,UNIQUE(A2:A5))-MINIFS(B:B,A:A,UNIQUE(A2:A5)),0,0)
内容的提问来源于stack exchange,提问作者Harold Choi
相关产品推荐
相关产品推荐

