SQLite - сам присоединяйся к "будущему я" - PullRequest
0 голосов
/ 23 декабря 2010

Я бы хотел присоединиться к столу со своим «будущим я».Или добавьте столбец со значением через неделю (или с любой другой периодичностью).Допустим, у меня есть таблица с датой, двумя идентификаторами и значением.В запросе я хотел бы получить значение, а также значение для того же набора идентификаторов через неделю.

Для новичка это два вопроса.Во-первых, когда у меня есть несколько идентификаторов (в реальной задаче у меня есть шесть идентификаторов, которые описывают уникальную запись для каждой даты), я должен создать свой собственный идентификатор для этого элемента?Во-вторых, как мне сделать это с задержкой в ​​одну неделю, особенно при изменении месяцев?

Вот пример набора данных:

       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 20101230    a    c    25           NA
26 20101230    a    d    26           NA
27 20101230    b    c    27           NA
28 20101230    b    d    28           NA
29 20101231    a    c    29            1
30 20101231    a    d    30            2
31 20101231    b    c    31            3
32 20101231    b    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

Спасибо!

1 Ответ

0 голосов
/ 23 декабря 2010

Я не очень хорошо знаю 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».

...