首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql Subselect by row count

Mysql Subselect by row count
EN

Stack Overflow用户
提问于 2019-01-24 06:52:45
回答 2查看 33关注 0票数 0

我希望采用下表,并以下面列出的格式表示数据。

所有的Type A dates作为列Date 1Type B dates作为列Date 2Type A的行数总是比Type B多,所以对于任何缺少的行,我都需要包含null。

我不确定这是什么类型的转换,这么多问题可能会产生误导。

查询可以用mysql >=5.7编写。

代码语言:javascript
复制
Type A -> Date 1
Type B -> Date 2

------------------     
|    Table       |
-----------------|
| type |  date   |
|   A  | 2019-01 |
|   A  | 2019-02 |
|   A  | 2019-03 |
|   A  | 2019-04 |
|   B  | 2018-10 |
|   B  | 2018-11 |
------------------

我想要将数据转换为以下内容:

代码语言:javascript
复制
------------------------
|   Date 1   |   Date 2 |
|   2019-01  |  2018-10 |
|   2019-02  |  2018-11 |
|   2019-03  |  null    |
|   2019-04  |  null    |
-------------------------
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-24 07:07:43

尝试这样做,mysql没有行号或排名函数,这很麻烦,但可以通过这样的方式来实现

代码语言:javascript
复制
SET @row_number_a = 0;
SET @row_number_b = 0;

SELECT * FROM
(SELECT
(@row_number_a:=@row_number_a + 1) AS rn, date
FROM test 
WHERE type = 'A'
ORDER BY date DESC) a

LEFT JOIN 
(SELECT
(@row_number_b:=@row_number_b + 1) AS rn, date
FROM test 
WHERE type = 'B'
ORDER BY date DESC) b
ON a.rn = b.rn
票数 3
EN

Stack Overflow用户

发布于 2019-01-24 07:12:13

在MySQL 8+中,您可以使用ROW_NUMBER()对行进行排序,然后将B日期连接到相应的A日期。请注意,如果您的B日期可能比A日期多,则需要一个在MySQL中不可用的FULL JOIN,但它可以由LEFT JOINRIGHT JOINUNION模拟。如果不是这样,您可以从UNION开始删除查询的一部分。

代码语言:javascript
复制
WITH a AS (SELECT ROW_NUMBER() OVER (ORDER BY `date`) AS `row`, `date`
           FROM table1
           WHERE type = 'A'),
     b AS (SELECT ROW_NUMBER() OVER (ORDER BY `date`) AS `row`, `date`
           FROM table1
           WHERE type = 'B')
SELECT a.date AS `Date 1`, b.date AS `Date 2`
FROM a
LEFT JOIN b ON b.row = a.row
UNION
SELECT a.date AS `Date 1`, b.date AS `Date 2`
FROM a
RIGHT JOIN b ON b.row = a.row

输出

代码语言:javascript
复制
Date 1      Date 2
2019-01     2018-10
2019-02     2018-11
2019-03     
2019-04     

Demo on dbfiddle (这也说明了对B日期多于A日期的FULL JOIN的需求)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54336922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档