2010-12-23 232 views
0

我想自己加入一個「未來的自我」表。或者在一週後(或其他任何週期性)附加一列。假設我有一個包含日期,兩個標識符和一個值的表格。在查詢中,我希望獲得該值以及一週後同一組標識的值。SQLite - 自我加入「未來的自我」

對於新手這是兩個問題。首先,當我有幾個標識符(在真正的問題中,我有六個標識符描述每個日期的唯一條目),我是否應該爲該項目創建自己的標識符?其次,我怎麼做這一個星期的滯後,特別是在幾個月的變化?

下面是一個例子的數據集:

 date id_1 id_2 value value_future 
1 20101224 a c  1   NA 
2 20101224 a d  2   NA 
3 20101224 b c  3   NA 
4 20101224 b d  4   NA 
5 20101225 a c  5   NA 
6 20101225 a d  6   NA 
7 20101225 b c  7   NA 
8 20101225 b d  8   NA 
9 20101226 a c  9   NA 
10 20101226 a d 10   NA 
11 20101226 b c 11   NA 
12 20101226 b d 12   NA 
13 20101227 a c 13   NA 
14 20101227 a d 14   NA 
15 20101227 b c 15   NA 
16 20101227 b d 16   NA 
17 20101228 a c 17   NA 
18 20101228 a d 18   NA 
19 20101228 b c 19   NA 
20 20101228 b d 20   NA 
21 20101229 a c 21   NA 
22 20101229 a d 22   NA 
23 20101229 b c 23   NA 
24 20101229 b d 24   NA 
25 201a c 25   NA 
26 201a d 26   NA 
27 201b c 27   NA 
28 201b d 28   NA 
29 201a c 29   1 
30 201a d 30   2 
31 201b c 31   3 
32 201b d 32   4 
33 20110101 a c 33   5 
34 20110101 a d 34   6 
35 20110101 b c 35   7 
36 20110101 b d 36   8 
37 20110102 a c 37   9 
38 20110102 a d 38   10 
39 20110102 b c 39   11 
40 20110102 b d 40   12 

謝謝!

回答

0

我不太瞭解SQLLite,所以我不得不查看如何添加日期,但我認爲這可能工作。

SELECT c.date, c.id_1, c.id_2, c.value, f.value as value_future 
FROM mytable c 
LEFT OUTER JOIN mytable f 
ON date(c.date, '+7 day') = f.date AND c.id_1 = f.id_1 AND c.id_2 = f.id_2 

基本上你想要做一個連接到相同的表,它要求你在連接(c和f)中別名兩個表。使用ON子句中的日期函數可以在一週後加入記錄,您可以根據需要調整日期修飾詞子句(+7天)以更改日期範圍。然後,只需粘貼您擁有的所有標識符。一般來說,創建一個主鍵是一個好主意,但在這種情況下它不會幫助你,因爲沒有辦法找出你想要加入的記錄的關鍵。最後需要指出的是,您現在在結果中有2個「值」列,因此您需要使用其中一個列來使列列表具有唯一性。這就是「價值未來」所做的。

+0

謝謝!這是答案!但是我的日期是以%Y%m%d的形式出現的。我也可以獲取%Y-%m-%d格式的數據,但是有沒有辦法在db內轉換出%Y%m%d?在R中,我會用strptime來做這件事,但這在這裏不起作用。謝謝! – 2010-12-23 16:17:04