Mysql按行数进行子查询

标签 mysql

我希望采用下表并以下面概述的格式表示数据。

所有 A 类日期 作为 Date 1 列,B 类日期 作为 Date 2 列。 Type A 的行数总是比 Type B 多,因此对于任何缺失的行,我需要包含 null。

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

查询可以用mysql写 >=5.7

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 |
------------------

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

------------------------
|   Date 1   |   Date 2 |
|   2019-01  |  2018-10 |
|   2019-02  |  2018-11 |
|   2019-03  |  null    |
|   2019-04  |  null    |
-------------------------

最佳答案

尝试这样的事情,mysql 没有行号或排名函数,这很痛苦,但可以通过这样的事情来实现

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

关于Mysql按行数进行子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54336922/

相关文章:

mysql - 转换 MySQL 返回的编码错误的字符串

php - mysql 中的 select 命令不返回任何行

mysql - 检查特定 ID 是否存在于另一个表中或不使用 MySQL 连接

php - 如何更新从组合框中获取的数据?

mysql - 按数值和字典序值排序字段

mysql - 选择 '' -''是什么意思

java - JDBC 和 MySQL 读取性能

PHP 返回数组或-1

mysql - 使用 LIMIT 对 MySQL 查询中的结果进行分页

php - 当用户登录我的系统时,如何保存他们的日期、时间和 IP?