2017-02-28 50 views
0

我有一個輸入表,它有日期和固定數量的事件。我需要從中創建具有發生日期的事件列表,以及組合事件及其發生的列表。以遞歸方式獲取行值(並進行組合)

實施例:

初始表:

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
  • 輸出將表,一個用於每個類型的組合的固定列表。
  • 作者SQL技巧。
+0

單獨在SQLite中執行此操作是不可能的。 –

+0

@CL。甚至不輸出1? – Ezeq

+0

即使輸出1需要自定義數量的列,SQLite也沒有機制從其內部構建動態查詢。 –

回答

0

經過與老師的一番交談,他指出我的模型從一開始就錯了。 改變表:

REATE TABLE event (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, date date NOT NULL, event smallint unsigned NOT NULL); 

* '身份證' 是不必要的

類似:

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