首页 > 解决方案 > Mysql查询以获取INNER联接查询中第一个事务和最后一个事务之间的天数

问题描述

我有来自 3 个不同数据库的 3 个表,我在这些表上应用了内部联接来获取数据。假设我有 db1.tab1、db2.tab2、db3.tab3。所以我的查询是:

select a.tran_cap_dt_tm, b.lang, c.email
from db1.tab1 a
inner join db2.tab2 on a.id = b.id
inner join db3.tab3 on b.id = c.id;

这给了我这个:

tran_captr_dt_tm                lang    email

2019-07-01T10:26:13.000+0800    en_us   test@test.commm
2019-07-10T10:26:13.000+0800    en_us   test@test.commm
2019-07-22T10:26:13.000+0800    en_us   test@test.commm

2019-07-01T10:26:13.000+0800    en_us   tgarden@gmail.com
2019-07-10T10:26:13.000+0800    en_us   tgarden@gmail.com
2019-07-24T10:26:13.000+0800    en_us   tgarden@gmail.com

2019-07-01T10:26:13.000+0800    en_us   jkrl@gmail.com
2019-07-10T10:26:13.000+0800    en_us   jkrl@gmail.com
2019-07-27T10:26:13.000+0800    en_us   jkrl@gmail.com

但这不完全是我想要的。我需要的是计算第一笔交易和最后一笔交易之间的持续时间(以天为单位)。像这样的东西:

duration_in_days    lang    email
22                  en_us   test@test.commm
24                  en_us   tgarden@gmail.com
27                  en_us   jkrl@gmail.com

我正在使用 mysql 5.7

标签: mysqljoin

解决方案


SELECT DATEDIFF(DATE_ADD(MAX(a.tran_captr_dt_tm),INTERVAL 1 DAY),MIN(a.tran_captr_dt_tm)) as duration_in_days, b.lang, c.email
FROM db1.tab1 a
INNER JOIN db2.tab2 on a.id = b.id
INNER JOIN db3.tab3 on b.id = c.id;
GROUP BY c.email

推荐阅读