總而言之一句話:加入派生表與自身
我有事件表: [TBL]
time | newState
1200 | 1
1300 | 2
1400 | 5
我需要把這個表格轉換爲間隔表[間隔]:
t0 | t1 | state
1200 | 1300 | 1
1300 | 1400 | 2
限制:SQL COMPACT EDITION
查詢:
SELECT leftPart.time AS t0, min(rightPart.time) AS t1, leftPart.newState
FROM tbl AS leftPart
LEFT OUTER JOIN tbl As rightPart
ON leftPart.time<rightPart.time
GROUP BY leftPart.Time,leftPart.newState
當[tbl]是數據庫中的永久表時它工作的很好,但在我的情況下[tbl]是從另一個select子查詢派生的!像這樣:
(SELECT time,newState
from ...) AS derivedTb
所以,當我嘗試這樣:
SELECT derivedTbl.time As t0,derivedTbl.state,min(rigthTblPart.time) FROM
(SELECT time,newState
from ...) AS derivedTbl
LEFT OUTER JOIN with derivedTbl AS rigthTblPart
ON derivedTbl.Time<rightTblPart.Time ...
它拋出錯誤: 「derivedTbl不存在」 ...
看來,派生表下它的別名是不可見的更高級別的查詢(謝謝谷歌翻譯!))...
有什麼辦法來存儲派生的表在查詢中,並在查詢的不同部分使用它們? SQL CE不支持臨時表,視圖和公共表表達式...
任務的詳細信息(如果有趣): 我有2個表事件:
[states1]
time | state1
1200 | 1
1300 | 2
1400 | 3
[states2]
time | state2
1200 | 0
1230 | 10
1330 | 20
1430 | 30
我需要轉換他們間隔表:皈依的
[intervals]
t0 t1 state1 state2
1200 1230 1 0
1230 1300 1 10
1300 1330 2 10
1330 1400 2 20
1400 1430 3 20
1430 NULL 3 30
階段: 1.整體的時間表
(SELECT Time FROM States1
UNION
SELECT Time FROM States2) AS timetbl
- 加入States1表
- 加入國家2臺
這一刻一切順利:
SELECT states12tbl.time, states12tbl.state1, states2tbl.State AS state2
FROM (SELECT states12tbl_1.time, states12tbl_1.state1, MAX(states2tbl.Time) AS states2time
FROM (SELECT timetbl.time, states1tbl.State AS state1
FROM (SELECT timetbl_1.Time AS time, MAX(States1tbl.Time) AS state1time
FROM (SELECT Time
FROM States1
UNION
SELECT Time
FROM States2) AS timetbl_1 LEFT OUTER JOIN
States1 AS States1tbl ON States1tbl.Time <= timetbl_1.Time
GROUP BY timetbl_1.Time) AS timetbl INNER JOIN
States1 AS states1tbl ON timetbl.state1time = states1tbl.Time
- 加入表本身...這是問題,我需要自己加入代碼(3),因爲sql ce不能記住臨時表......如果你有更好的主意,請分享:)
SQL CE版本3。5 –
由於SQL CE的限制,您必須發佈完整的子查詢,我們會看看我們是否可以做些什麼。否則,你必須寫子查詢兩次.. –
似乎唯一的選擇是編寫子查詢兩次,因爲沒有辦法在sql ce中存儲臨時表......子查詢真的很難:) ... –