mysql - 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
解决方案
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
推荐阅读
- sql - 如何根据分数选择表格中的前5名学生
- asp.net-mvc - 在带有 EF Core 应用程序的简单 ASP.NET Core MVC 中使用 DTO 和 AutoMapper
- sql - 在 ms sql server 中获取特定数据库中的模式
- javascript - 在映射函数中使用 async await
- machine-learning - 实现骰子损失的正确方法是什么?sigmoid 还是 softmax?
- python - python子进程模块调用方法
- angular-material-7 - 如何根据ngx mat select search得到的值过滤mat表中的数据
- python - Pandas:按列和索引的条件选择行
- python - Python - 如何找到与其所有邻居相比的最大数量
- list - SwiftUI:围绕 UITableView 实现包装器以实现自定义 List-like 视图