sql - 每行到列值
问题描述
我正在尝试创建一个视图,该视图显示第一个表的列以及第二个表的前 3 条记录,按日期在 1 行中排序。
我尝试使用子表的偏移量选择特定行并加入主表,但是当加入查询结果时按日期排序,没有
WHERE tblMain_id = ..
加入 SQL 的子句返回错误的记录。
这是 sqlfiddle 示例:sqlfiddle 演示
主函数
| id | fname | lname | salary |
+----+-------+-------+--------+
| 1 | John | Doe | 1000 |
| 2 | Bob | Ross | 5000 |
| 3 | Carl | Sagan | 2000 |
| 4 | Daryl | Dixon | 3000 |
tblSub
| id | email | emaildate | tblmain_id |
+----+-----------------+------------+------------+
| 1 | John@Doe1.com | 2019-01-01 | 1 |
| 2 | John@Doe2.com | 2019-01-02 | 1 |
| 3 | John@Doe3.com | 2019-01-03 | 1 |
| 4 | Bob@Ross1.com | 2019-02-01 | 2 |
| 5 | Bob@Ross2.com | 2018-12-01 | 2 |
| 6 | Carl@Sagan.com | 2019-10-01 | 3 |
| 7 | Daryl@Dixon.com | 2019-11-01 | 4 |
查看我正在努力实现的目标:
| id | fname | lname | salary | email_1 | emaildate_1 | email_2 | emaildate_2 | email_3 | emaildate_3 |
+----+-------+-------+--------+---------------+-------------+---------------+-------------+---------------+-------------+
| 1 | John | Doe | 1000 | John@Doe1.com | 2019-01-01 | John@Doe2.com | 2019-01-02 | John@Doe3.com | 2019-01-03 |
我创建的视图
| id | fname | lname | salary | email_1 | emaildate_1 | email_2 | emaildate_2 | email_3 | emaildate_3 |
+----+-------+-------+--------+---------+-------------+---------------+-------------+---------------+-------------+
| 1 | John | Doe | 1000 | (null) | (null) | John@Doe1.com | 2019-01-01 | John@Doe2.com | 2019-01-02 |
解决方案
您可以使用条件聚合:
select m.id, m.fname, m.lname, m.salary,
max(s.email) filter (where seqnum = 1) as email_1,
max(s.emailDate) filter (where seqnum = 1) as emailDate_1,
max(s.email) filter (where seqnum = 2) as email_2,
max(s.emailDate) filter (where seqnum = 3) as emailDate_2,
max(s.email) filter (where seqnum = 3) as email_3,
max(s.emailDate) filter (where seqnum = 3) as emailDate_3
from tblMain m left join
(select s.*,
row_number() over (partition by tblMain_id order by emailDate desc) as seqnum
from tblsub s
) s
on s.tblMain_id = m.id
where m.id = 1
group by m.id, m.fname, m.lname, m.salary;
这是一个 SQL 小提琴。
推荐阅读
- ruby-on-rails - 在集成 Active Storage 和 Google Cloud Storage 时,storage.yml 中的“项目”键真的有必要吗?
- ffmpeg - 当输入是实时相机设备时,使用输入帧率选项(在 FFmpeg 中)时的预期行为是什么?
- java - spring mvc属性文件中linux home的路径
- freeswitch - FreeSWITCH 中的内置(或嵌入式)语言和使用事件套接字库 (ESL) 的脚本有什么区别?
- gitlab - 在 Digital Ocean 上升级 GitLab 时没有登录页面
- powerbi - 基于 Power BI 中的最后一次匹配的联接表
- php - 包含条件的异常
- asynchronous - 为什么这个使用 go 块的 clojure 代码不起作用?
- shopify - 在 Shopify 中,如何按最近的优先顺序设置评论的排序顺序?
- java - 如何检查棋盘的所有方格是否至少踩过一次?