mysql - 如何合并 2 个表以获得每个子类别的希望日期和最后订购日期?
问题描述
例如,我有一个如下所示的愿望表,该表包含有关客户愿望清单详细信息的数据
EmailAddress wish_created_date Category
a@gmail.com Aug-3-2021 Curtain
a@gmail.com Aug-2-2021 Table
b@gmail.com Aug-2-2021 Sofa
b@gmail.com Aug-2-2021 Sofa
b@gmail.com Aug-2-2021 Sofa
e@gmail.com Aug-3-2021 Sofa
e@gmail.com Aug-3-2021 Sofa
e@gmail.com Aug-3-2021 Sofa
然后我有另一个名为 - last_category_orders的表。此表包含有关每个类别中客户最后订购日期的数据。有4类窗帘,桌子,椅子,沙发
EmailAddress last_curtain_order last_table_order last_sofa_order last_chair_order
a@gmail.com Aug-5-2021 Aug-3-2021
b@gmail.com Aug-5-2021
c@gmail.com Aug-9-2021 Aug-9-2021
d@gmail.com Aug-9-2021 Aug-9-2021
e@gmail.com Aug-10-2021
预期结果 我的决赛桌应该如下所示,
EmailAddress wish_created_date Category last_cat_order
a@gmail.com Aug-3-2021 Curtain Aug-5-2021
a@gmail.com Aug-2-2021 Table Aug-3-2021
b@gmail.com Aug-2-2021 Sofa Aug-5-2021
b@gmail.com Aug-2-2021 Sofa Aug-5-2021
b@gmail.com Aug-2-2021 Sofa Aug-5-2021
e@gmail.com Aug-3-2021 Sofa null
e@gmail.com Aug-3-2021 Sofa null
e@gmail.com Aug-3-2021 Sofa null
最终表应该是希望与last_category_orders表的左连接,带有 last_cat_order 日期。
示例:a@gmail.com 为窗帘创建了愿望。a@gmail.com 的 last_curtain_order 是 2021 年 8 月 5 日。这必须显示在决赛桌中。
我被困在如何在决赛桌中获得结果。
解决方案
Mysql 没有 unpivot 运算符,因此您可以使用下面的 union 来实现它
select w.*, cat.date last_cat_order
from wish w
left join
(
select
max(last_curtain_order ) date, 'curtain' category, emailaddress
from last_category_orders LC
group by emailaddress
union
max(last_table_order) date,'table' category, emailaddress
from last_category_orders LC
group by emailaddress
union
max(last_sofa_order) date,'sofa' category, emailaddress
from last_category_orders LC
group by emailaddress
union
max(last_chair_order) date,'chair' category, emailaddress
from last_category_orders LC
group by emailaddress
)Cat
on cat.emailaddress = w.emailaddress
and cat.category =w.Category
推荐阅读
- c# - 如何使用带有 2 个表的 Sql 连接,但 table2 具有多对一关系
- c++ - Visual Studio“项目+项目”问题
- mysql - 如何在 MySQL RDS 中使用 GROUP_CONCAT 创建超链接?
- google-apps-script - 如何通过 Google 表格中的 URL 导入 XLSX 文件(已更新)?
- javascript - Discord.js Covid Tracker 命令
- java - 如何在 Java 中使用 Retrofit 解析嵌套的多个 Json 对象
- ios - 强制 Unity iOS 应用程序崩溃以进行 Crashlytic 仪表板测试
- spring-boot - Spring Controller 在 Kotlin 中返回一个空对象
- sharepoint-online - SharePoint 列表 - 为审批者创建列表视图
- typescript - 为什么我不能在派生接口中添加重载?