mysql - MySQL 5.5 - 在 SELECT 中减少表
问题描述
我有一张简单的桌子和有趣的任务要做。我想从最初减少表格
+----------+------------+--------+------------+--------+------------+
| NoClosed | Closed | NoOpen | Open | NoPlan | Plan |
+----------+------------+--------+------------+--------+------------+
| 1 | 2018-10-23 | NULL | NULL | NULL | NULL |
| 2 | 2018-10-22 | NULL | NULL | NULL | NULL |
| 1 | NULL | 1 | 2018-10-23 | NULL | NULL |
| NULL | NULL | 10 | 2018-10-25 | NULL | NULL |
| NULL | NULL | NULL | NULL | 1 | 2018-10-27 |
| NULL | NULL | NULL | NULL | 1 | 2018-10-28 |
| 10 | 2018-10-17 | NULL | NULL | NULL | NULL |
| 1 | NULL | 1 | 2018-10-18 | NULL | NULL |
+----------+------------+--------+------------+--------+------------+
对此:
Date NoClosed NoOpen NoPlan
17/10/2018 10
18/10/2018
19/10/2018
20/10/2018
21/10/2018
22/10/2018 2
23/10/2018 3 1
24/10/2018
25/10/2018 10
26/10/2018
27/10/2018 1
28/10/2018 1
29/10/2018
30/10/2018
31/10/2018
这将从 -7 天到 +7 天,但是我无法在选择中创建包含这些日期的列。我想我需要它为所有数据提供一个枢轴点,然后对其进行计数并将其分组。
我的表格代码在这里,任何想法都将不胜感激。
CREATE TABLE Orders
(
NoClosed VARCHAR(20),
Closed DATE,
NoOpen VARCHAR(20),
Open DATE,
NoPlan VARCHAR(20),
Plan DATE);
insert into Orders values (1, "2018-10-23", NULL, NULL, NULL, NULL);
insert into Orders values (2, "2018-10-22", NULL, NULL, NULL, NULL);
insert into Orders values (1, NULL, 1, "2018-10-23", NULL, NULL);
insert into Orders values (NULL, NULL, 10, "2018-10-25", NULL, NULL);
insert into Orders values (NULL, NULL, NULL, NULL, 1, "2018-10-27");
insert into Orders values (NULL, NULL, NULL, NULL, 1, "2018-10-28");
insert into Orders values (10, "2018-10-17", NULL, NULL, NULL, NULL);
insert into Orders values (1, NULL, 1, "2018-10-18", NULL, NULL);
解决方案
请参阅在 sql 结果中填充空日期的最直接方法是什么(在 mysql 或 perl 端)?了解如何创建包含日期范围内所有日期的表格。然后左加入这个查询,该查询可以透视您的数据:
SELECT d.date,
MAX(CASE WHEN o.closed = date THEN o.NoClosed END) AS NoClosed,
MAX(CASE WHEN o.open = date THEN o.NoOpen END) AS NoCLosed,
MAX(CASE WHEN o.plan = date THEN o.NoPlan END) AS NoPlan
FROM DateTable AS d
LEFT JOIN Orders ON d.date IN (o.closed, o.open, o.plan)
GROUP BY d.date
推荐阅读
- c++ - 自定义构建文件更改不会触发 VS 2017 中的项目重建
- java - 简单的冒险游戏产生错误的输出,编译时没有错误
- javascript - 两个html文件和一个javascript文件,用jquery改变
- python - 添加一个可以将数值分成低中位数和高段的列?
- html - 如何使用我当前的代码将我的视频放入下拉菜单中?
- c++ - 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- php - Laravel SQLSTATE[HY000] [2002] 连接被拒绝但修补程序可以工作
- haskell - 为什么类型 f (fbc) (f (fab) (fac)) 不匹配 (.)?
- javascript - 在大量句子中查找 n-gram 频率
- php - 启用 FOS 用户捆绑电子邮件注册