Question

Je voudrais moi joindre à une table avec son « futur soi ». Ou ajouter une colonne à la valeur une semaine plus tard (ou toute autre périodicité). Disons que j'ai une table avec une date, deux identifiants, et une valeur. Dans la requête, je voudrais obtenir la valeur, ainsi que la valeur pour le même ensemble de indentifiers une semaine plus tard.

Pour un débutant c'est deux questions. Tout d'abord, quand j'ai plusieurs identifiants (dans le vrai problème j'ai six identifiants qui décrivent une entrée unique pour chaque date) dois-je créer mon propre identifiant pour cet article? Deuxièmement, comment dois-je faire ce décalage d'une semaine, en particulier à travers un changement de mois?

Voici un exemple ensemble de données:

       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

Merci!

Était-ce utile?

La solution

Je ne sais pas SqlLite très bien, donc je devais chercher comment faire des ajouts de date, mais je pense que ce travail de force.

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

Fondamentalement, vous voulez faire une jointure à la même table qui vous oblige à alias les deux tables dans la jointure (c et f). Utilisez la fonction de date dans la clause ON pour se joindre à l'enregistrement d'une semaine à partir de maintenant, vous pouvez régler la clause de modification de la date (7 jours) est nécessaire de changer la plage de dates. Ensuite, il suffit virer de bord sur tous les identifiants que vous avez. En général, il est une bonne idée de créer une seule clé primaire, mais dans ce cas, il ne vous aidera pas parce qu'il n'y aurait aucun moyen de déterminer la clé de l'enregistrement que vous voulez joindre pour elle. La dernière chose à signaler est que vous avez maintenant 2 colonnes « valeur » dans le résultat si vous avez besoin d'un alias d'entre eux pour faire la liste des colonnes unique. C'est ce que le « comme value_future » fait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top