递归地将行值获取到一列(并进行组合)
get row values to one column recursively (and doing combinations)
我有一个输入 table,它有日期和固定数量的事件。我需要从中创建带有发生日期的事件列表,以及组合事件及其发生的列表。
示例:
初始table:
CREATE TABLE events (
date DATE PRIMARY KEY,
e1 INTEGER,
e2 INTEGER,
e3 INTEGER
);
date | e1 | e2 | e3 |
--------------------------
2017-02-04 | 2 | 1 | 26 |
2017-02-05 | 14 | 2 | 1 |
2017-02-06 | 1 | 3 | 2 |
输出 1
eventN | total | date1 | date2 |...| date'N'
--------------------------------------------------------
01 | 3 | 2017-02-04 | 2017-02-05 |...| 2017-02-06
02 | 2 | 2017-02-05 | 2017-02-06 |...| (null)
...
26 | 1 | 2017-02-04 | (null) |...| (null)
输出 2
CobineEventN | total | date1 | ... | date'N'
-----------------------------------------------------
0102 | 2 | 2017-02-05 | ... | 2017-02-06
0103 | 1 | 2017-02-06 | ... | (null)
....
2526 | 1 | 2017-02-04 | ... | (null)
....
限制:
- 这必须在 SQLite 中完成。
- 日期没有限制(即 'n' 个唯一日期)。
- 事件是(大约)50 个 ID 的固定列表
- 输出将是tables,每种组合一个。
- 作者SQL技能
和一位老师交谈后,他指出我的模型从一开始就错了。
将 table 更改为:
REATE TABLE event (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, date date NOT NULL, event smallint unsigned NOT NULL);
*'id' 不需要
类似于:
Id date event
31 2016-10-05 1
44 2016-10-07 1
32 2016-10-05 2
我可以使用如下查询:
select A.event as nA, B.event as nB, C.event as nC, date
from event as A, event as B, event as C
where A.date = B.date
and B.date=C.date
and nC<>nA
and nC<>nB
并获取所需的值。
nA nB nC date
1 2 3 2016-10-05
1 2 3 2016-10-07
1 2 4 2016-10-07
...
虽然格式和我想象的不太一样,但是效果还是不错的。
我不需要为项目的其余部分创建更多的列,只需执行正确的查询。
BR
我有一个输入 table,它有日期和固定数量的事件。我需要从中创建带有发生日期的事件列表,以及组合事件及其发生的列表。
示例:
初始table:
CREATE TABLE events (
date DATE PRIMARY KEY,
e1 INTEGER,
e2 INTEGER,
e3 INTEGER
);
date | e1 | e2 | e3 |
--------------------------
2017-02-04 | 2 | 1 | 26 |
2017-02-05 | 14 | 2 | 1 |
2017-02-06 | 1 | 3 | 2 |
输出 1
eventN | total | date1 | date2 |...| date'N'
--------------------------------------------------------
01 | 3 | 2017-02-04 | 2017-02-05 |...| 2017-02-06
02 | 2 | 2017-02-05 | 2017-02-06 |...| (null)
...
26 | 1 | 2017-02-04 | (null) |...| (null)
输出 2
CobineEventN | total | date1 | ... | date'N'
-----------------------------------------------------
0102 | 2 | 2017-02-05 | ... | 2017-02-06
0103 | 1 | 2017-02-06 | ... | (null)
....
2526 | 1 | 2017-02-04 | ... | (null)
....
限制:
- 这必须在 SQLite 中完成。
- 日期没有限制(即 'n' 个唯一日期)。
- 事件是(大约)50 个 ID 的固定列表
- 输出将是tables,每种组合一个。
- 作者SQL技能
和一位老师交谈后,他指出我的模型从一开始就错了。 将 table 更改为:
REATE TABLE event (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, date date NOT NULL, event smallint unsigned NOT NULL);
*'id' 不需要
类似于:
Id date event
31 2016-10-05 1
44 2016-10-07 1
32 2016-10-05 2
我可以使用如下查询:
select A.event as nA, B.event as nB, C.event as nC, date
from event as A, event as B, event as C
where A.date = B.date
and B.date=C.date
and nC<>nA
and nC<>nB
并获取所需的值。
nA nB nC date
1 2 3 2016-10-05
1 2 3 2016-10-07
1 2 4 2016-10-07
...
虽然格式和我想象的不太一样,但是效果还是不错的。 我不需要为项目的其余部分创建更多的列,只需执行正确的查询。
BR