2010-12-23 4 views
0

"미래의 자기"를 가진 테이블에 스스로 참여하고 싶습니다. 또는 1 주일 후 값이있는 열 (또는 다른 주기성)을 추가하십시오. 날짜, 두 개의 식별자 및 값이있는 테이블이 있다고 가정 해 보겠습니다. 쿼리에서 나는 값을 얻고 싶습니다. 그리고 일주일 후에 동일한 식별자 집합에 대한 값을 얻고 싶습니다.SQLite - "future self"와 자체 조인

초보자는 두 가지 질문이 있습니다. 첫째, 여러 개의 식별자가있을 때 (실제 문제에서 각 날짜의 고유 항목을 설명하는 6 개의 식별자가 있음) 해당 항목에 대한 고유 한 식별자를 만들어야합니까? 둘째,이 한 일주일의 지연을 어떻게해야합니까? 특히 몇 달 만에 변화가 있습니까?

 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 개의 "값"열이 있으므로 열 목록을 고유하게 만들기 위해 그 중 하나의 별칭을 지정해야한다는 것입니다. 이것이 바로 "as value_future"가하는 것입니다.

+0

고마워요! 이것은 답변입니다! 하지만 내 날짜는 % Y % m % d 형식입니다. 데이터를 % Y- % m- % d 형식으로 가져올 수도 있지만 db 안에 % Y % m % d을 변환 할 수있는 방법이 있습니까? R에서는 strptime을 사용하여이 작업을 수행하지만 여기서는 작동하지 않습니다. 감사! –