0

その「未来の自己」でテーブルに自己参加したい。または、1週間後(またはその他の周期性)の値を列に追加します。日付、2つの識別子、および値を持つテーブルがあるとします。クエリでは、値と、1週間後の同じ識別子のセットの値を取得したいと思います。

初心者の場合、これは2つの質問です。まず、複数の識別子がある場合(実際の問​​題では、各日付の一意のエントリを説明する6つの識別子があります)、そのアイテムに独自の識別子を作成する必要がありますか?次に、特に月の変化全体で、この1週間の遅れをどのように処理しますか?

データセットの例を次に示します。

       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

ありがとう!

4

1 に答える 1

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句の日付関数を使用して、今から1週間後のレコードに参加します。必要に応じて、日付修飾子句(+7日)を調整して、日付範囲を変更できます。次に、持っているすべての識別子を追加します。一般に、単一の主キーを作成することをお勧めしますが、この場合、参加したいレコードのキーを把握する方法がないため、役に立ちません。最後に指摘するのは、結果に2つの「値」列があるため、列リストを一意にするためにそのうちの1つにエイリアスを付ける必要があるということです。それが「asvalue_future」が行うことです。

于 2010-12-23T14:56:06.493 に答える